gpt4 book ai didi

sql - MYSQL:带有 GROUP BY、LEFT JOIN 和 WHERE 子句的 COUNT 不返回零值

转载 作者:可可西里 更新时间:2023-11-01 06:45:25 24 4
gpt4 key购买 nike

我确定这有一个非常简单的答案,但我似乎找不到它(不确定要搜索什么!)。标准的计数/分组查询可能如下所示:

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123

这按预期工作,如果没有找到行则返回 0。然而:

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`

仅当 table_1 中至少有一行时才有效,如果有零行则返回空结果集失败。我真的很想返回 0!有人启发我吗?如果您在伦敦,可以提供啤酒作为交换 ;-)

最佳答案

它返回零行的原因是您正在对 table_1 中的值进行分组。由于 table_1 中没有值,因此没有要返回的行。换句话说,如果您在 GROUP BY 的查询中返回 t1.any_col,如下所示:

SELECT `t1`.`any_col`, COUNT(`t2`.`name`) 
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`

当没有行时,t1.any_col 会显示什么?实现你想要的唯一方法是将你的结果与另一个检查 table_1 中没有行的查询合并。在此示例中,我使用 INFORMATION_SCHEMA View 只是为了获得我可以查询的内容。

SELECT COUNT(`t2`.`name`) 
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`
UNION ALL
SELECT 0
FROM INFORMATION_SCHEMA.TABLES
Where Not Exists( Select 1 From `table_1` )
LIMIT 1

关于sql - MYSQL:带有 GROUP BY、LEFT JOIN 和 WHERE 子句的 COUNT 不返回零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2730273/

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