Суть следующая: Имеется таблица
id id_abitur quest answer 1 20170001 exam 9 2 20170001 exam 10 3 20170001 exam 17 8 20170002 exam 9 9 20170002 exam 10 10 20170002 exam 14 11 20170002 exam 17 16 20170003 exam 9 17 20170003 exam 10 18 20170003 exam 14 19 20170003 exam 17 24 20170004 exam 9 25 20170004 exam 10
допустим мне нужна выборка id_abitur
, у которых quest
='exam' и answer
только 9,10,17
делая запрос
SELECT `id_abitur`, COUNT(`id`) AS c FROM meta_abitur WHERE `quest`='exam' AND `answer` IN (9,10,17) GROUP BY `id_abitur` HAVING c = 3
Выводятся id 9,10,17 а так же у которых 9,10,17,19, т.е. те у которых есть еще одна строка. Что я делаю не так и как это исправить?
Заменим COUNT
на SUM
. Если ответил на нужные вопросы - прибавляем один. Если на другие - отнимаем 1. Берем только те, где сумма равна трём:
SELECT `id_abitur`,
sum(case when `answer` IN (9,10,17) then 1 else -1 end) AS c FROM meta_abitur
WHERE `quest`='exam' GROUP BY `id_abitur` HAVING c = 3;
http://sqlfiddle.com/#!9/ef21d2/5
Вариант:
SELECT
DISTINCT `t1`.`id_abitur`
FROM
tab AS `t1`
LEFT JOIN (
SELECT
`t2`.`id_abitur`
FROM
tab AS `t2`
WHERE
`t2`.`answer` NOT IN (9,10,17) AND
`t2`.`quest` = 'exam'
) AS `j` ON
`t1`.`id_abitur` = `j`.`id_abitur`
WHERE
`j`.`id_abitur` IS NULL AND
`t1`.`quest` = 'exam'
GROUP BY
`t1`.`id_abitur`
HAVING
COUNT(`t1`.`id_abitur`) = 3
На SQL Fiddle.
Группируй по полю answer:
SELECT
id_abitur,
COUNT(id) AS c
FROM
meta_abitur
WHERE
quest='exam' AND
answer IN (9,10,17)
GROUP BY
answer
HAVING c = 3
Еще один вариант: Внутренний подзапрос определяет количество ответов для каждого абитуриента. Внешний запрос соединяет таблицу meta_abitur с подзапросом с учетом количества (c)
и номеров (answer in (9,10,17))
правильных ответов и параметра quest
select distinct id_abitur from meta_abitur i inner join (select id_abitur,count(*) as c from meta_abitur WHERE quest='exam' group by 1
having c=3) o USING(id_abitur) where answer in (9,10,17);
Есть необходимость писать все запросы к БД в файлДля этого включаю в настройках (переменные сервера) general_log=1 Однако спустя время (возможно...
Всем приветЕсть бэкап Joomla сайта, сделанный в Akeeba
Параметр с переменной арностью с типом элемента, недоступным во время выполнения, может привести к замусориванию кучи и породить предупреждения...
Столкнулся с проблемой создания ограничивающей фигуры для 3D объекта моделька которого состоит из множества Mesh Для создаия ограничивающей...