SQL тестовое задание для собеседования

Есть таблица пользователей и их пол, каждый пользователь принадлежит к какой-то группе.

CREATE TABLE `users` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `gender` enum('m','w') DEFAULT NULL,
   `group_id` int(11) NOT NULL DEFAULT '0',
   PRIMARY KEY (`id`)
)

INSERT INTO `users` VALUES (1,1,'m'),(2,1,'m'),(3,1,'w'),(4,2,'m'),(5,2,'w'),(6,3,'m');

Необходимо найти группы исключая группу 3, в которых мужчин больше чем женщин. И правильный ответ:

SELECT group_id,
count(IF (gender='m', 1, NULL)) as m,
count(IF (gender='w', 1, NULL)) as w
FROM users
WHERE group_id <> 3
GROUP BY group_id
HAVING m > w

Удачки.


29.08.2014 10:46

Комментарии

Вы уверены, что правильный запрос на 1 вопрос будет именно таким? У меня, с другими данными он не прошёл. Более того, а что если будут новости без категорий вообще? Вот мой запрос: SELECT news.id, COUNT(DISTINCT nc1.cat_id) nc1_count, COUNT(DISTINCT nc2.cat_id) nc2_count FROM news LEFT JOIN news_cat nc1 ON news.id = nc1.news_id LEFT JOIN news_cat nc2 ON news.id = nc2.news_id AND nc2.cat_id <> 5 GROUP BY news.id HAVING nc1_count = nc2_count
Илья |
По первому вопросу - оба варианта (в теле и в комментарии) не верные. Думайте.
Дмитрий |
Наверное не хватает условия: новостей без категорий не бывает
Lebnik |
уже подумал, может подскажите правильный ответ? :)
Lebnik |

Copyrights © 2007 - 2026 YaPro.Ru