MySql: este posibil să „SUM IF” sau să „COUNT IF”? (Programare, Mysql)

realtebo a intrebat.

Am o coloană ‘hour’Am o coloană ‘kind’ (poate fi 1,2 sau 3)

Aș vrea să fac ceva de genul: „‘time’:

SELECT count(id), SUM(hour) as totHour, SUM( IF ( kind = 1, 1, 0 ) ) as countKindOne

sau

SELECT count(id), SUM(hour) as totHour, COUNT( IF ( kind = 1 ) ) as countKindOne

Dar mysql îmi spune că am o eroare… care este eroarea!?

Vă rugăm să consultați acest topic stackoverflow: MySQL SUM IF câmp b = câmp a

.. Nu sunt în măsură să răspund la această …

6 răspunsuri
Taryn

Puteți utiliza un CASE declarație:

SELECT count(id), 
    SUM(hour) as totHour, 
    SUM(case when kind = 1 then 1 else 0 end) as countKindOne

Comentarii

  • Folosește-ți logica cu If SUM(IF(o.id < 500000, 1, 0)) AS imported –  > Por Zohaib.
  • @Zohaib Îmi place mai mult abordarea ta – este mai scurtă și mai clară. Totuși +1 pentru rezolvarea problemei. –  > Por The Onin.
Gavin Towey

vrei ceva de genul:

SELECT count(id), SUM(hour) as totHour, SUM(kind=1) as countKindOne;

Rețineți că al doilea exemplu al dvs. a fost aproape, dar funcția IF() întotdeauna acceptă trei argumente, așa că ar fi trebuit să fie COUNT(IF(kind=1,1,NULL)). Prefer sintaxa SUM() prezentată mai sus, deoarece este concisă.

Onur Yıldırım

De asemenea, puteți utiliza SUM + IF care este mai scurtă decât SUM + CASE:

SELECT
    count(id)
    , SUM(IF(kind=1, 1, 0)) AS countKindOne
    , SUM(CASE WHEN kind=2 THEN 1 ELSE 0 END) AS countKindTwo

eci

Există o mică diferență între răspunsurile de top, și anume SUM(case when kind = 1 then 1 else 0 end) și SUM(kind=1).

Atunci când toate valorile din coloana kind se întâmplă să fie NULL, rezultatul lui SUM(case when kind = 1 then 1 else 0 end) este 0, în timp ce rezultatul lui SUM(kind=1) este NULL.

Un exemplu (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)
;

Rezultatele interogării:

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

Fernando Souza

Din MYSQL am rezolvat problema în felul următor:

SUM(CASE WHEN used = 1 THEN 1 ELSE 0 END) as amount_one,

Sper că vă ajută 😀

Antony

Este demn de remarcat faptul că vă puteți baza pe răspunsul lui Gavin Toweys folosind mai multe câmpuri din întreaga interogare, cum ar fi

SUM(table.field = 1 AND table2.field = 2)

De asemenea, puteți utiliza această sintaxă pentru COUNT și sunt sigur că și alte funcții.

Tags: