#python #sql #sqlite
#python #sql #sqlite
Вопрос:
У меня есть таблица ассоциаций, PostToTag, содержащая только 2 столбца, post_id и tag_id. Я хотел бы отфильтровать каждую строку, содержащую tag_id, для которой в таблице PostToTag имеется менее 30 экземпляров этого tag_id.
SELECT ptt.post_id, ptt.tag_id, COUNT(tag_id) n FROM PostToTag ptt GROUP BY tag_id HAVING n >= 30
Приведенный выше код близок к тому, что мне нужно, но я хотел бы получить все идентификаторы тегов_id, как если бы я не использовал GROUP BY . Я привык работать с dplyr в R и иметь возможность разгруппировать после выполнения агрегатных функций. Каков обычный способ «разгруппировать» в SQL?
Ответ №1:
Хммм … используйте оконные функции:
SELECT ptt.*
FROM (SELECT ptt.*,
COUNT(*) OVER (PARTITION BY ptt.tag_id) as cnt
FROM PostToTag ptt
) ptt
WHERE cnt >= 30;