Значение столбца предела повторяется до 2 верхних - PullRequest
0 голосов
/ 27 сентября 2018

Итак, у меня есть этот запрос:

SELECT 
    Search.USER_ID,
    Search.SEARCH_TERM,
    COUNT(*) AS Search.count
FROM Search

GROUP BY 1,2
ORDER BY 3 DESC

, который возвращает ответ, который выглядит следующим образом:

USER_ID   SEARCH_TERM    count
bob       dog            50
bob       cat            45
sally     cat            38
john      mouse          30
sally     turtle         10
sally     lion           5
john      zebra          3
john      leopard        1

И мой вопрос: как бы я изменил запрос, чтобыон возвращает только 2 самых популярных для любого пользователя термина?Таким образом, в приведенном выше примере последняя строка для Салли будет удалена, а последняя строка для Джона также будет удалена, оставляя в общей сложности 6 строк;2 для каждого пользователя, вот так:

USER_ID   SEARCH_TERM    count
bob       dog            50
bob       cat            45
sally     cat            38
john      mouse          30
sally     turtle         10
john      zebra          3

1 Ответ

0 голосов
/ 27 сентября 2018

В SQL Server вы можете поместить исходный запрос в CTE, добавить функцию ROW_NUMBER().Затем в новом основном запросе просто добавьте предложение WHERE, чтобы ограничить номер строки.Ваш запрос будет выглядеть примерно так:

;WITH OriginalQuery AS
(
    SELECT 
        s.[User_id]
        ,s.Search_Term
        ,COUNT(*) AS 'count'
        ,ROW_NUMBER() OVER (PARTITION BY s.[USER_ID] ORDER BY COUNT(*) DESC) AS rn
    FROM Search s
    GROUP BY s.[User_id], s.Search_Term
)
SELECT oq.User_id
      ,oq.Search_Term
      ,oq.count
FROM OriginalQuery oq
WHERE rn <= 2
ORDER BY oq.count DESC 

РЕДАКТИРОВАТЬ: я указал SQL Server в качестве dbms, которые я использовал здесь, но приведенное выше должно быть ANSI-совместимым и работать в Snowflake.

...