Mysql 如何使用聚合函数连接来自相关查询的数据?
我有下表:Mysql 如何使用聚合函数连接来自相关查询的数据?,mysql,sql,Mysql,Sql,我有下表: userActions: id | uId | goodAction | actionOverridden | dateAdded 我编写了一个查询以获取: 良好操作的数量(行中goodAction=1) 错误操作数(行中goodAction=0) 被覆盖的操作数(行中actionoverrided=1) 上面的查询获取ID为520的用户的数据,但我想获取所有用户的此信息。使用上面的查询,我需要在PHP中获得一个用户列表,然后循环该列表并执行上面的查询,注入用户ID 如何修改
userActions:
id | uId | goodAction | actionOverridden | dateAdded
我编写了一个查询以获取:
- 良好操作的数量(行中
)goodAction=1
- 错误操作数(行中
)goodAction=0
- 被覆盖的操作数(行中
)actionoverrided=1
上面的查询获取ID为
520
的用户的数据,但我想获取所有用户的此信息。使用上面的查询,我需要在PHP中获得一个用户列表,然后循环该列表并执行上面的查询,注入用户ID
如何修改上述查询以使其检索所有用户的数据
我知道需要从子查询中删除
和ua.uId=520
条件,并且我认为ua.uId的分组将在子查询之外使用,但我不确定具体要做什么。您可以使用CASE表达式代替所有这些相关查询,并使用group by获得所有用户的结果,如下所示:
SELECT t.uID,
sum(case when t.goodAction = 0 then 1 else 0 end) as badActions,
sum(case when t.goodAction = 1 then 1 else 0 end) as goodActions,
sum(case when t.actionOverridden = 1 then 1 else 0 end) as actionOverrides
FROM userActions t
WHERE t.dateAdded > NOW() - INTERVAL 1 year
GROUP BY t.uID
您可以将COUNT和NULLIF与group by uID结合使用:
SELECT t.uID,
COUNT(NULLIF(1, t.goodAction)) AS badActions,
COUNT(NULLIF(0, t.goodAction)) AS goodActions,
COUNT(NULLIF(0, t.actionOverridden)) AS actionOverrides
FROM userActions t
WHERE t.dateAdded > NOW() - INTERVAL 1 year
GROUP BY t.uID;
SELECT t.uID,
COUNT(NULLIF(1, t.goodAction)) AS badActions,
COUNT(NULLIF(0, t.goodAction)) AS goodActions,
COUNT(NULLIF(0, t.actionOverridden)) AS actionOverrides
FROM userActions t
WHERE t.dateAdded > NOW() - INTERVAL 1 year
GROUP BY t.uID;