#mysql #sql #count #subquery #having-clause
#mysql #sql #количество #подзапрос #having-предложение
Вопрос:
Таблица t1
id | name
_________
1 | ann
1 | joe
1 | joe
2 | ann
2 | ann
2 | joe
2 | joe
3 | ted
3 | ann
3 | joe
4 | bob
4 | bob
4 | bob
4 | ted
Оператор MySQL, который возвращает только идентификаторы, в которых имя появляется большую часть времени,
id
__
1
4
Я пробовал следующее, но оно не возвращает никаких результатов,
SELECT `id` FROM `t1` GROUP BY `id` having max(name) > 0.5 * max(name)
Ответ №1:
Вы можете использовать оконные функции и агрегирование:
select id, name
from (select id, name, count(*) as cnt,
sum(count(*)) over (partition by id) as id_cnt
from t
group by id, name
) ni
where cnt > 0.5 * id_cnt;