我有点卡住,因为不确定由于我找不到正确的方式而找不到与我要寻找的内容相关的任何内容。因此,我想举一个我想做的事的例子。注意:不是真实情况。
我对一个字段有计数:
SELECT count(user_id)
FROM usersgroups
group by user_id
现在,我要使用计数中的最大值进行计算。像这样:
SELECT count(user_id) as count,
SUM(max(count(user_id)) / count(user_id)) as blub
FROM usergroups
group by user_id
但是我得到错误的错误,因为我不能使用SUM函数中的COUNT()函数?
还有其他方法可以进行计算。
P.S。 calc用于计算最大值与记录/当前值的百分比。
更新
所以我期望的百分比是
count | percentage
5 | 1
4 | 0.8
3 | 0.6
2 | 0.3
1 | 0.2
答案 0 :(得分:1)
ORDER BY COUNT(user_id) DESC LIMIT 1
来获取相同的内容。CROSS JOIN
和usergroups
表一起使用此结果集,因此usergroups
表中的每一行都可以访问最大计数值。GROUP BY
和适当的汇总来确定“百分比”。GROUP BY
有效,SELECT
子句必须仅包含聚合的列/表达式,或GROUP BY
子句中指定的列。这就是在最大计数值上使用MAX()
的原因。由于该值只是一个标量,因此MAX()
仅返回相同的值。尝试以下操作:
SELECT
ug.user_id,
COUNT(ug.user_id) AS user_count,
COUNT(ug.user_id) / MAX(mcnt.count) AS percent
FROM
usergroups AS ug
CROSS JOIN
(
SELECT COUNT(user_id) AS count
FROM usersgroups
GROUP BY user_id
ORDER BY COUNT(user_id) DESC LIMIT 1
) AS mcnt
GROUP BY ug.user_id
ORDER BY user_count DESC
答案 1 :(得分:0)
将可用的user_id计数为子查询,然后将user_id值除以计数总和。
select user_id/ sum(count) as percentage
from(
select count(user_id) as count , user_id
from usergroups
where user_id != 0
group by user_id
) as A
group by count, user_id