【问题标题】:Query for SUM of grouped COUNT in SQL Query table查询 SQL 查询表中分组 COUNT 的 SUM
【发布时间】:2020-02-12 17:37:36
【问题描述】:

请以此为例,我的主表是

ID Name 
-- ------- 
1 Alpha 
2 Beta 
3 Beta 
4 Beta 
5 Charlie 
6 Charlie 

因为名称列中有重复项。按名称分组后的结果表,计数列是 -

Name Count 
------- ----- 
Alpha 1 
Beta 3 
Charlie 2 
SUM 6 

这里 SUM 作为所有结果 COUNT 列的单独行取出,我试图从主表的结果 Count 函数中获取所有行的 SUM,但作为 SUM 的单独查询与单独的行不同

我的表有 2 个字段 Roles 和 User_Id。 我已经尝试过下面的查询

select orl.role , 
       SUM (orl.role) as "No of Users" 
from org_user_roles orl 
group by orl.role

【问题讨论】:

  • 错误消息显然是在抱怨您试图对user_id 列求和,该列的类型为uuid,不存在sum 函数。在您的问题正文中的 SQL 中,您改为对 role 列求和 - 这是您想要做的吗?
  • 尝试获取每个角色的结果列“count”值的总和。

标签: sql postgresql group-by rollup


【解决方案1】:

如果您想计算每个角色的行数(用户),请使用 COUNT aggregate function - 而不是 SUM:

select "role", count(*) as "No of Users" from org_user_roles group by "role";

要获得这些分组计数的总和 - 这只是总行数 - 使用:

select count(*) as "Sum" from org_user_roles;

【讨论】:

  • 得到用户数后,如何得到总和?
  • 计数已经是总和了?不清楚你的意思。如果您想将所有角色的用户计数相加,那是没有意义的——这只是org_user_roles 表中的行数,您可以通过select count(*) from org_user_roles; 获得(没有任何分组)。如果您需要其他内容,请发布一些示例数据和预期结果。
  • 我正在尝试获取结果列计数的所有行的总和。
  • 各组计数的总和就是未分组行的计数。如果此代码不符合您的要求,请在您的问题中提供一个示例。
  • 这就是select count(*) from org_user_roles; 将实现的目标,在您的示例中产生预期的结果6
【解决方案2】:

我认为这是一个带有数值的string 列。所以在执行sum()操作之前需要cast它到int

select  orl.role, 
    sum(orl.user_id::int) as "No of Users" 
from org_user_roles orl 
group by orl.role

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多