Задавайте вопросы, мы ответим
Вы не зашли.
Суть вот в чем: есть таблица с клиентами kl:
kod,kodref(кем приведен),fam,im.ot4...Запрос: Вывести информацию о том, кто из клиентов кого привёл: Фамилия И.О. клиента (в одном поле), Фамилия И.О. (в одном поле) того, кто привёл данного
клиента. Получить отдельный список клиентов, пришедших самостоячтель-
но.
Как должен выглядеть запрос подскажите!
И еще. Выяснить, кто из клиентов привёл наибольшее количество других клиентов.
Также выяснить, кто из клиентов никого не приводил. Тоже не мойму как строить запрос
Отредактированно Стас (09.12.2010 21:21:35)
Неактивен
Фамилии —
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;
Неактивен
Спасибо большое! Если что еще можно обращаться?
Неактивен
Можно, конечно, но только чур попробуйте сначала написать самостоятельно
Неактивен
Сам пытался ничего не вышло(( надо оформить 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 );
Неактивен
Так как Вам не важно, какие сертификаты получил инженер, не будем
на это обращать внимание. Т.е. у нас есть таблица людей sh и таблица
тестов test. Осталось найти неудачников
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.
Что-нибудь такое Если у Вас бывает «не сдал» вместо NULL, то правильно
считать во втором случае как SUM(IF(test.fakt = 'Сдал', 1, 0)).
Неактивен