2017-09-11 163 views
1

我有以下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) 

我做错了什么?由于

+0

您可以创建一个小提琴,这将有助于测试答案:HTTP ://sqlfiddle.com/ – kenfire

回答

0

至于解决方法,你可以使用的伎俩与工会:

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 

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

相关问题