Mysql Помогиииите, пожааалуйста, написать сложный запрооос.. mysql

Monyamiau

Новичок
Есть скрипт созданной базы. Наверное, кривой и косой, но делали сами, старались.

Если вкратце - то всего 9 таблиц - справочник кодов валют, справочник филиалов, справочник типов счетов, справочник адресов, справочник мест работы, клиенты, счета, кредитные карты, история операций клиента, и их заполнения.

Запросы такие:
1. Отобразить количество кредитных карт для всех клиентов - т.е. таблицу "имя - фамилия - количество карт"
Это я осилила и даже работает! Вот:

select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta

2. Примерно в том же виде - количество карт с истекшим сроком. Если таких нет, то отобразить 0.
А тут проблема. Я написала такой запрос:

select a.kol as ist
from
(select name_clienta, surname_clienta, count(*) kol, srok_deistvia
from scheta s
inner join cards c ON s.scheta_id=c.scheta_id
inner join clients cl ON cl.clients_id=s.clients_id
group by name_clienta, surname_clienta) a
where (a.srok_deistvia<sysdate())
НО он сокращает всех, у кого карты действуют, т.е. их срок не истек! А нужно для всех-всех клиентов. И если не истек, то вывести 0. Как это сделать? Помогите, пожалуйста.

Вот скрипт создания базы.

CREATE DATABASE credit_db CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE TABLE credit_db.sprav_codov_valut
(sprav_codov_valut_id INT PRIMARY KEY,
code_valuty INT,
code_valuty_ISO INT,
nazvanie_valuty VARCHAR(255)
);


CREATE TABLE credit_db.sprav_filialov
(sprav_filialov_id INT,
PRIMARY KEY(sprav_filialov_id),
code_filiala INT,
nazvanie_filiala VARCHAR(255)
);


CREATE TABLE credit_db.sprav_tipov_schetov
(sprav_tipov_schetov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_tipov_schetov_id),
code_tipa_scheta VARCHAR(5),
naim_tipa_scheta VARCHAR(255)
);


CREATE TABLE credit_db.sprav_adresov
(sprav_adresov_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(sprav_adresov_id),
code_adresa INT,
adres VARCHAR(255),
gorod VARCHAR(128),
strana VARCHAR(128),
pocht_index INT
);


CREATE TABLE credit_db.sprav_mest_raboty
(sprav_mest_raboty_id INT,
PRIMARY KEY(sprav_mest_raboty_id),
code_mesta_raboty INT,
nasvan_mesta_raboty VARCHAR(255),
code_adresa INT,
sprav_adresov_id INT NOT NULL,

FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id)
);



CREATE TABLE credit_db.clients
(clients_id INT,
PRIMARY KEY(clients_id),
code_clienta INT NOT NULL,
name_clienta VARCHAR(128) NOT NULL,
surname_clienta VARCHAR(128) NOT NULL,
code_adresa_propiski INT NOT NULL,
code_adresa_progiv INT NOT NULL,
code_mesta_raboty INT,
sprav_adresov_id INT NOT NULL,
sprav_mest_raboty_id INT NOT NULL,

FOREIGN KEY (sprav_adresov_id) REFERENCES sprav_adresov(sprav_adresov_id),
FOREIGN KEY (sprav_mest_raboty_id) REFERENCES sprav_mest_raboty(sprav_mest_raboty_id)
);


CREATE TABLE credit_db.scheta
(scheta_id INT,
PRIMARY KEY (scheta_id),
code_scheta INT NOT NULL,
code_clienta INT NOT NULL,
code_valuty INT NOT NULL,
code_filiala INT NOT NULL,
code_tipa_scheta INT NOT NULL,
nomer_scheta VARCHAR(128) NOT NULL,
sprav_codov_valut_id INT NOT NULL,
sprav_filialov_id INT NOT NULL,
sprav_tipov_schetov_id INT NOT NULL,
clients_id INT NOT NULL,

FOREIGN KEY (sprav_codov_valut_id) REFERENCES sprav_codov_valut(sprav_codov_valut_id),
FOREIGN KEY (sprav_filialov_id) REFERENCES sprav_filialov(sprav_filialov_id),
FOREIGN KEY (sprav_tipov_schetov_id) REFERENCES sprav_tipov_schetov(sprav_tipov_schetov_id),
FOREIGN KEY (clients_id) REFERENCES clients(clients_id)
);

CREATE TABLE credit_db.cards
(cards_id INT,
PRIMARY KEY(cards_id),
code_carty INT,
code_scheta INT,
nomer_carty VARCHAR(128) NOT NULL,
date_vipuska DATE,
srok_deistvia DATE,
scheta_id INT NOT NULL,

FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)
);


CREATE TABLE credit_db.istoria_operaciy_clienta
(istoria_operaciy_clienta_id INT,
PRIMARY KEY(istoria_operaciy_clienta_id),
code_operacii INT NOT NULL,
code_clienta INT NOT NULL,
data_operacii DATE NOT NULL,
opisanie_operacii VARCHAR(255),
scheta_id INT NOT NULL,

FOREIGN KEY (scheta_id) REFERENCES scheta(scheta_id)

);


commit;
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Вам нужен просто count подзапроса на выборку всех просроченных карт
ЗЫ а можно даже без подзапроса... просто группировать по клиенту, а выбирать count от карт, срок которых не истек
 

Monyamiau

Новичок
Вам нужен просто count подзапроса на выборку всех просроченных карт
ЗЫ а можно даже без подзапроса... просто группировать по клиенту, а выбирать count от карт, срок которых не истек
а можно пожаааалуйста по конкретней? дизайнером бд мне не стать никогда, да я и не собиралась, поэтому мне не очень понятна Ваша мысль :(

тема сисек не раскрыта :(
а Ваша понятна.
вот печаль-то :)
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
да, простите за грубость, это просто уточнение на какую именно тему была моя первая фраза
 

Вурдалак

Продвинутый новичок
Да никто так не поможет, всем лень читать кучу текста и писать какие-то запросы. Попросите однокурсников.
 
Сверху