gpt4 book ai didi

mysql - COUNT(*) 在 GROUP BY 子句之前返回行数?

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:49 25 4
gpt4 key购买 nike

我有以下查询:

SELECT COUNT(*)
FROM mydb.table1 t1
JOIN mydb.table2 t2 ON t1.id = t2.t1_id
WHERE t1.user_id = 44 AND t1.date_deleted IS NULL
GROUP BY t2.system_id, CASE WHEN t2.system_id IS NULL THEN t2.id ELSE 0 END

它返回 COUNT(*) = 6,而它应该返回 1 因为该用户的所有六行都具有相同的 t2.system_id(所以它们应该被分组)。

如果我将查询更改为选择 * 而不是 COUNT(*),它只会返回一行。如果我随后删除 GROUP BY 子句,将返回六行。

这让我觉得 COUNT(*) 是在执行 GROUP BY 子句之前返回行数,但从我读到的内容来看,这不是应该的去工作。

这种行为正常吗?

最佳答案

试试这个:

select count(*) from (
SELECT *
FROM mydb.table1 t1
JOIN mydb.table2 t2 ON t1.id = t2.t1_id
WHERE t1.user_id = 44
AND t1.date_deleted IS NULL
GROUP BY t2.system_id,
CASE WHEN t2.system_id IS NULL THEN t2.id ELSE 0 END
) q1

count 为您提供每组中的项目数(非空),所以是的,它确实按预期方式工作。这意味着如果您只需要组的总数,最简单的方法就是将其包装在另一个查询中。

关于mysql - COUNT(*) 在 GROUP BY 子句之前返回行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30009607/

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