SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 09.12.2010 21:20:35

Стас
Участник
Зарегистрирован: 09.12.2010
Сообщений: 3

Помогите пожалуйста с запросами.

Суть вот в чем: есть таблица с клиентами kl:
kod,kodref(кем приведен),fam,im.ot4...Запрос: Вывести информацию о том, кто из клиентов кого привёл: Фамилия И.О. клиента (в одном поле), Фамилия И.О. (в одном поле) того, кто привёл данного
клиента. Получить отдельный список клиентов, пришедших самостоячтель-
но.
Как должен выглядеть запрос подскажите!

И еще. Выяснить, кто из клиентов привёл наибольшее количество других клиентов.
Также выяснить, кто из клиентов никого не приводил. Тоже не мойму как строить запрос

Отредактированно Стас (09.12.2010 21:21:35)

Неактивен

 

#2 09.12.2010 21:50:10

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите пожалуйста с запросами.

Фамилии —
SELECT k.fam, kr.fam
FROM kl k LEFT JOIN kl kr ON k.kodref = kr.kod;

Ну и с WHERE kr.fam IS NULL — самостоятельные.

По количеству клиентов —
SELECT kodref, COUNT(*) FROM kl GROUP BY kodref;

Неактивен

 

#3 09.12.2010 22:04:52

Стас
Участник
Зарегистрирован: 09.12.2010
Сообщений: 3

Re: Помогите пожалуйста с запросами.

Спасибо большое! Если что еще можно обращаться?

Неактивен

 

#4 09.12.2010 22:22:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите пожалуйста с запросами.

Можно, конечно, но только чур попробуйте сначала написать самостоятельно smile

Неактивен

 

#5 12.12.2010 16:30:16

Стас
Участник
Зарегистрирован: 09.12.2010
Сообщений: 3

Re: Помогите пожалуйста с запросами.

Сам пытался ничего не вышло(( надо оформить 2 запроса обещаю последняя моя просьба))

Смысл таков есть инженеры, они проходят тесты и по итогам теста получают сертификаты. инженер может не пройти тест и не получить сертификат а может получить несколько.

Выявить не сертифицированных инженеров. При этом выяснить, кто вообще
не претендовал на сертификаты, а кто не смог их получить, хотя и пытался.

Для каждого сертифицированного инженера посчитать общее число
сертификатов, количество всех попыток сертификации, процент удачных попыток
от их общего числа.

таблица со штатом
CREATE TABLE `sh`(
   `kod` int unsigned NOT NULL,
   `dol` varchar (10) NOT NULL,
   `fam` varchar(100) NOT NULL,
   `im` varchar(20) NOT NULL,
   `ot4` varchar (20) NULL,

/*сертефикат*/

DROP TABLE IF EXISTS `ser`;

CREATE TABLE `ser`(
   `kodser` INT(22) NOT NULL,
   `vid` varchar (22) NOT NULL,

   PRIMARY KEY (`kodser`)
) engine=myisam default charset=utf8 COLLATE utf8_general_ci;

INSERT INTO `ser` VALUES
(11,'Инженер-проектировщик'),
(12,'Инженер ПТО '),
(13,'инженер-конструктор'),
(14,'инженер-эколог'),
(15,'инженер-электроник'),
(16,'Инженер-проектировщик'),
(17,'Инженер ПТО');

/*TEST*/

DROP TABLE IF EXISTS `test`;

CREATE TABLE `test`(
   `kodt` INT(22) NOT NULL,
   `kodser` INT(22) NOT NULL,
   `koding` INT (22) NOT NULL,
   `data` date NOT NULL,
   `fakt` varchar(10) NULL,

   PRIMARY KEY (`kodt`)
) engine=myisam default charset=utf8 COLLATE utf8_general_ci;

INSERT INTO `test` VALUES
(111,17,11,'2009.08.20','Сдал'),
(112,11,12,'2009.08.20','Сдал'),
(113,12,13,'2009.08.10','Сдал'),
(114,13,14,'2009.08.20','Сдал'),
(115,14,15,'2009.08.10','Сдал'),
(116,15,16,'2009.08.15',NULL );

Неактивен

 

#6 13.12.2010 01:36:58

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите пожалуйста с запросами.

Так как Вам не важно, какие сертификаты получил инженер, не будем
на это обращать внимание. Т.е. у нас есть таблица людей sh и таблица
тестов test. Осталось найти неудачников wink

SELECT sh.fam, COUNT(test.*) AS tries, COUNT(test.fakt) AS certs
FROM sh LEFT JOIN test ON sh.kod = test.kodt
GROUP BY sh.kod.

Что-нибудь такое smile Если у Вас бывает «не сдал» вместо NULL, то правильно
считать во втором случае как SUM(IF(test.fakt = 'Сдал', 1, 0)).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson