“分组依据”计数的结果如何通过计数的总和来标准化?
例如,给定:
User Rating (1-5)
----------------------
1 3
1 4
1 2
3 5
4 3
3 2
2 3
结果将是:
User Count Percentage
---------------------------
1 3 .42 (=3/7)
2 1 .14 (=1/7)
3 2 .28 (...)
4 1 .14
因此,对于每个用户,他们提供的评分数量是每个人提供的总评分百分比。
答案 0 :(得分:1)
SELECT DISTINCT ON (user) user, count(*) OVER (PARTITION BY user) AS cnt,
count(*) OVER (PARTITION BY user) / count(*) OVER () AS percentage;
count(*) OVER (PARTITION BY user)
是所谓的window function。窗口函数允许您通过某个“分区”创建的“窗口”执行某些操作,该分区在此处通过用户ID进行。简单易懂的英语:为每个不同的count(*)
值计算分区user
,因此实际上它会计算每个user
值的行数。
答案 1 :(得分:0)
如果不使用窗口函数或变量,则需要在第二个“maxed”子查询上交叉连接分组子查询,然后再次选择以返回可以使用的子集。
SELECT
B.UserID,
B.UserCount,
A.CountAll
FROM
(
SELECT
CountAll=SUM(UserCount)
FROM
(
SELECT
UserCount=COUNT(*)
FROM
MyTable
GROUP BY
UserID
) AS A
)AS C
CROSS JOIN(
SELECT
UserID,
UserCount=COUNT(*)
FROM
MyTable
GROUP BY
UserID
)AS B