2016-05-17 74 views
2
SELECT COUNT(*) FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 1 
//return 1 row 

SELECT COUNT(*) FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 2 
//return 0 row 

我有2個問題,我需要檢查用戶1和用戶2,用戶1必須具有1行&用戶2必須零行Mysql的合併2數查詢在一個查詢

我的問題是:這可能與兩列合併這2個查詢一起

收益爲1行//return 1, 0

回答

4

可以使用sum()用條件來計算的條件有多少次是真的

SELECT SUM(user = 1) as u1, 
     SUM(user = 2) as u2 
FROM a 
WHERE year = 2016 and month = 5 and date = 17 
2

試試這個:

SELECT SUM(user = 1) AS user1, SUM(user = 2) AS user2 
FROM a 
WHERE year = 2016 AND month = 5 AND date = 17 

SELECT子句的第一個字段返回user = 1次出現次數,而第二個字段返回user = 2次出現次數。

3

是的,這就是所謂的有條件聚集:

SELECT count(CASE WHEN `user` = 1 THEN 1 END) as usr1_cnt, 
     count(CASE WHEN `user` = 2 THEN 1 END) as usr2_cnt 
FROM a 
WHERE year = 2016 and month = 5 and date = 17 
1

試試這個,

SELECT 
    (
    SELECT COUNT(*) 
    FROM a 
    WHERE year = 2016 && month = 5 && date = 17 && user = 1 
    ) AS usr1, 
    (
    SELECT COUNT(*) 
    FROM a 
    WHERE year = 2016 && month = 5 && date = 17 && user = 2 
    ) AS usr2 
+0

爲什麼從表中選擇兩次?這可以在一個選擇中完成。 – sagi

0

您可以試試這個:

SELECT * from (
SELECT COUNT(*) count1 FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 1) aa, 
(SELECT COUNT(*) count2 FROM a WHERE year = 2016 && month = 5 && date = 17 && user = 2) bb; 
+0

爲什麼要從表格中選擇兩次?這可以在一個選擇中完成。 – sagi

+0

但是我想用兩張桌子來做。 –

+0

這是一個不必要的計算! – sagi

1

你也可以試試這個:

SELECT SUM(user = 1) as user1, 
     SUM(user = 2) as user2 
FROM a 
WHERE year = 2016 and month = 5 and date = 17;