我有一张桌子作为这个例子:
CREATE TABLE customerEvent(
customerID int NOT NULL,
eventID int NOT NULL
)
customerID可能出现在许多记录中。我使用以下查询来识别最常见的customerID:
SELECT
customerID,eventID
,row_number() OVER(PARTITION BY customerID ORDER BY eventID) as frequency
FROM customerEvent
ORDER BY frequency DESC
有了这个,我看到了那些最常见的customerID。但他们只出现了一次在名单的顶端。示例:
customerID eventID frequency
7 3 5
15 9 4
7 1 4
9 4 3
7 10 3
15 2 3
我需要最常见的customerID的所有记录都出现在顶部,例如:
customerID eventID frequency
7 3 5
7 1 4
7 10 3
15 9 4
15 2 3
9 4 3
你知道我怎么能构建这样的查询吗?
发布于 2015-08-14 14:10:58
似乎你真的不需要“频率”的排序,只有“最大频率”的每个客户。您可以使用COUNT(*) OVER (PARTITION BY customerID)
:
SELECT
customerID,
eventID,
ROW_NUMBER() OVER (PARTITION BY customerID ORDER BY eventID) AS frequency
FROM
customerEvent
ORDER BY
COUNT(*) OVER (PARTITION BY customerID) DESC,
customerID,
frequency DESC ;
order by
的第二部分需要是customerID
,以防万一。我假设,如果有两个或更多的客户拥有相同数量的事件,则不希望他们的事件混淆。
https://dba.stackexchange.com/questions/111052
复制相似问题