Ich habe eine Spalte 'Stunde' Ich habe eine Spalte 'Art' (es kann 1,2 oder 3 sein)
Ich möchte etwas tun wie:
SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne
oder
SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne
Aber MySQL sagt mir, ich habe einen Fehler ... was ist der Fehler!?
Weitere Informationen finden Sie in diesem Thema zum Stapelüberlauf: MySQL SUM IF Feld b = Feld a
.. Ich kann das nicht beantworten ...
SUM(IF(o.id < 500000, 1, 0)) AS imported
du willst so etwas wie:
SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;
Beachten Sie, dass Ihr zweites Beispiel nahe war, aber die IF () - Funktion immer drei Argumente akzeptiert, also hätte es sein müssen
COUNT(IF(kind=1,1,NULL))
. Ich bevorzuge die oben gezeigte SUM () -Syntax, weil sie kurz ist.quelle
Sie können auch verwenden,
SUM + IF
was kürzer ist alsSUM + CASE
:SELECT count(id) , SUM(IF(kind=1, 1, 0)) AS countKindOne , SUM(CASE WHEN kind=2 THEN 1 ELSE 0 END) AS countKindTwo
quelle
Es gibt einen kleinen Unterschied zwischen den Top-Antworten, nämlich
SUM(case when kind = 1 then 1 else 0 end)
undSUM(kind=1)
.Wenn alle Werte in Spalte
kind
geschehen zu seinNULL
, der das ErgebnisSUM(case when kind = 1 then 1 else 0 end)
ist0
, während das ErgebnisSUM(kind=1)
istNULL
.Ein Beispiel ( http://sqlfiddle.com/#!9/b23807/2 ):
Schema:
CREATE TABLE Table1 (`first_col` int, `second_col` int) ; INSERT INTO Table1 (`first_col`, `second_col`) VALUES (1, NULL), (1, NULL), (NULL, NULL) ;
Abfrageergebnisse:
SELECT SUM(first_col=1) FROM Table1; -- Result: 2 SELECT SUM(first_col=2) FROM Table1; -- Result: 0 SELECT SUM(second_col=1) FROM Table1; -- Result: NULL SELECT SUM(CASE WHEN second_col=1 THEN 1 ELSE 0 END) FROM Table1; -- Result: 0
quelle
Mit MYSQL habe ich das Problem folgendermaßen gelöst:
SUM(CASE WHEN used = 1 THEN 1 ELSE 0 END) as amount_one,
Hoffe das hilft: D.
quelle
Es ist erwähnenswert, dass Sie auf der Antwort von Gavin Toweys aufbauen können, indem Sie mehrere Felder in Ihrer Anfrage verwenden, z
SUM(table.field = 1 AND table2.field = 2)
Sie können diese Syntax auch für verwenden,
COUNT
und ich bin sicher, dass auch andere Funktionen verwendet werden.quelle