gpt4 book ai didi

mysql - 如果满足给定条件,则选择两列,否则选择另外两列

转载 作者:行者123 更新时间:2023-11-30 21:53:28 24 4
gpt4 key购买 nike

我有以下 mysql 查询

mysql> SELECT COUNT(*) AS freq, column_name FROM table_name WHERE created_time >= CURDATE() GROUP BY column_name;
Empty set (0.41 sec)

在这种情况下,当结果为空时,我想为两列都返回 0,因此结果应该是这样的:

+--------+------------+
| freq | column_name|
+--------+------------+
| 0 | 0 |
+--------+------------+

我已经尝试了以下方法,但没有一个能按预期工作:

mysql> SELECT IFNULL(COUNT(*) AS freq, 0), IFNULL(column_name, 0) FROM table_name WHERE created_time >= CURDATE() GROUP BY column_name;
Empty set (0.40 sec)


mysql> SELECT IFNULL((SELECT COUNT(*), column_name FROM table_name WHERE created_time >= CURDATE() GROUP BY column_name), 'not found');
ERROR 1241 (21000): Operand should contain 1 column(s)


mysql> SELECT CASE WHEN ( (SELECT COUNT(*) FROM table_name WHERE created_time >= CURDATE()) > 0 )
THEN (SELECT COUNT(*) AS freq, column_name FROM table_name WHERE created_time >= CURDATE() GROUP BY column_name)
ELSE (SELECT 0,0) END;
ERROR 1241 (21000): Operand should contain 1 column(s)


mysql> SELECT IF(
(SELECT COUNT(*) FROM table_name WHERE created_time >= CURDATE()) > 0,
(SELECT COUNT(*) AS freq, column_name FROM table_name WHERE created_time >= CURDATE() GROUP BY column_name),
(SELECT 0,0)
);
ERROR 1241 (21000): Operand should contain 1 column(s)

我做错了什么?谢谢

最佳答案

作为解决方法,您可以使用 union 的技巧:

SELECT COUNT(*) AS freq, column_name 
FROM table_name
WHERE created_time >= CURDATE()
GROUP BY column_name
UNION
SELECT 0,0
FROM dual
WHERE (SELECT COUNT(*) FROM table_name WHERE created_time >= CURDATE()) = 0

我希望有人建议更优雅的方式来做到这一点

关于mysql - 如果满足给定条件,则选择两列,否则选择另外两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46152869/

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