gpt4 book ai didi

mysql 按总计进行分组查询

转载 作者:行者123 更新时间:2023-11-29 06:55:07 25 4
gpt4 key购买 nike

我使用以下查询从由用户 ID 链接的 2 个表中检索每个状态的事件数。

SELECT state,COUNT(*) AS num 
FROM tableUserInfo
WHERE userID IN (SELECT userID
FROM tableEvents
WHERE conditionOne = 1
AND conditionTwo = 2)
GROUP BY state

该查询工作正常。我的问题是,并非所有州都有用户条目,我需要查询为这些条目返回 0。我想知道是否有一种方法,例如加入或使用 in 子句,它将包含一组所有状态,使查询对于 tableEvents 中没有条目的任何状态返回 0?

最佳答案

您有州列表吗?如果没有,那么这将给出您的数据库知道的所有状态的列表:

SELECT DISTINCT state FROM tableUserInfo

...并将其括在括号中,可以将其放在下面的查询中:

SELECT s.state, IFNULL(cnt, 0) AS num
FROM list_of_states s
LEFT JOIN (
SELECT state,COUNT(*) AS cnt
FROM tableUserInfo ui
INNER JOIN tableEvents te
ON ui.userId=te.userId
WHERE conditionOne = 1
AND conditionTwo = 2
GROUP BY state
) u
ON s.state=u.state;

尽管在没有“list_of_states”的情况下,这样做会更有效:

SELECT ui.state, SUM(IF(te.userId IS NULL, 0, 1)) AS cnt 
FROM tableUserInfo ui
LEFT JOIN tableEvents te
ON ui.userId=te.userId
AND te.conditionOne = 1
AND te.conditionTwo = 2
GROUP BY state;

关于mysql 按总计进行分组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45962926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com