Mysql使用max()值进行计算

时间:2018-11-14 10:18:56

标签: mysql

我有点卡住,因为不确定由于我找不到正确的方式而找不到与我要寻找的内容相关的任何内容。因此,我想举一个我想做的事的例子。注意:不是真实情况。

我对一个字段有计数:

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
  • 5/5 = 1
  • 4/5 = 0.8
  • 3/5 = 0.6
  • 2/5 = 0.4
  • 1/5 = 0.2

2 个答案:

答案 0 :(得分:1)

  • 在单独的Derived Table中,您可以从所有计数中获取最大计数值。我只是使用ORDER BY COUNT(user_id) DESC LIMIT 1来获取相同的内容。
  • CROSS JOINusergroups表一起使用此结果集,因此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