繁体   English   中英

Mysql用max()值计算

[英]Mysql calculate with the max() value

我有点卡住了,因为我不确定我是否在寻找错误的方式,因为我找不到与我正在寻找的东西相关的任何东西。 所以我想举一个例子来说明我正在尝试做的事情。 注意:不是真实场景。

我有一个领域的计数:

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() 函数?

那么有没有其他方法可以进行计算。

PS calc 用于计算最大值与记录/当前值的百分比。

更新

所以我期望的是一个百分比

 count | percentage 
5      | 1
4      | 0.8
3      | 0.6
2      | 0.3
1      | 0.2
  • 5/5 = 1
  • 4/5 = 0.8
  • 3/5 = 0.6
  • 2/5 = 0.4
  • 1/5 = 0.2
  • 在单独的Derived Table 中,您可以从所有计数中获取最大计数值。 我只是使用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 

将可用的 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM