这个问题在这里已经有答案了:
多个查询同一个表但在不同的列中mysql(4个答案)
11个月前关门了。
我有以下sql查询:
SELECT DISTINCT
username,
(CASE WHEN role_id = 1 THEN SUM(user_roles.hours) ELSE NULL END) AS `Admin`,
(CASE WHEN role_id = 2 THEN SUM(user_roles.hours) ELSE NULL END) AS `Subscriber`
FROM user_roles
LEFT JOIN users ON users.id = user_roles.user_id;
此查询的目的是在每行上显示用户名,并为每个用户名显示管理员、订阅者等的小时数。
此查询生成以下结果:
username Admin Subscriber
abc 10 0
abc 0 5
def 0 7
def 4 0
每个用户名都应该有一个唯一的值,该值属于admin或subscriber(没有用户可以同时拥有这两个值)
我希望输出为:
username Admin Subscriber
abc 10 5
def 4 7
其中没有显示零的列,并且每个用户名只有一行结果。
我希望很清楚我在这里要完成什么。
谢谢你的帮助
2条答案
按热度按时间7fhtutme1#
我想你把连接点改过来了。
你应该做一个左连接
users
至user_roles
并使用条件聚合:oxiaedzo2#
这回答了您最初提出的问题。
您需要条件聚合。“condition”是聚合函数的参数。但您也可以将其简化为:
这使用了一个mysql快捷方式,您可以将一个布尔值相加,得到“true”s的计数。另外,我还包括
id
在GROUP BY
以防用户同名。很明显,如果你知道的话,这是不需要的username
是独一无二的。如果要对另一列求和,则
CASE
需要表达式: