2016-05-17 14 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 

I 2 Fragen haben, ich brauche 2 Benutzer 1 und Benutzer zu überprüfen, Benutzer 1 muss 1 hat Zeile & Benutzer 2 Muss 0 ZeileMysql fusionieren 2 Count-Abfrage in einer Abfrage

Meine Frage ist: ist dass man diese zwei Abfragen zusammen

Rückkehr in 1 Zeile mit 2 Spalten //return 1, 0

Antwort

4

Sie sum() mit einer Bedingung verwenden können, zu zählen, wie oft die Bedingung

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

Versuchen Sie, diese zu fusionieren:

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

Das erste Feld der SELECT-Klausel gibt user = 1 Vorkommen zurück, während das zweite Feld user = 2 Vorkommen zurückgibt.

3

Ja wahr ist, wird diese bedingte Aggregation genannt:

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

dies versuchen,

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

Warum wählen Sie aus der Tabelle zweimal? Dies kann in einer Auswahl erfolgen. – sagi

0

Sie können dies versuchen:

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

Warum zweimal aus der Tabelle auswählen? Dies kann in einer Auswahl erfolgen. – sagi

+0

Aber ich möchte es mit zwei Tisch so machen. –

+0

Dies ist eine unnötige Berechnung! – sagi

1

Sie können auch versuchen, diese ein:

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