2017-09-11 75 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 

我希望有人建議更優雅的方式來做到這一點

相關問題