Подтвердить что ты не робот

MySql: возможно ли "SUM IF" или "COUNT IF"?

У меня есть столбец "час" У меня есть столбец типа (он может быть 1,2 или 3)

Я хотел бы сделать что-то вроде:

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

или

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

Но mysql скажите мне, что у меня есть ошибка... какая ошибка!?

См. эту тему в разделе stackoverflow: MySQL SUM IF field b = field a

.. Я не могу ответить на этот вопрос...

4b9b3361

Ответ 1

Вы можете использовать оператор CASE:

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

Ответ 2

вам нужно что-то вроде:

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

Обратите внимание, что ваш второй пример был близок, но функция IF() всегда принимает три аргумента, поэтому это должно было быть COUNT(IF(kind=1,1,NULL)). Я предпочитаю синтаксис SUM(), показанный выше, потому что он кратким.

Ответ 3

Вы также можете использовать SUM + IF, который короче 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

Ответ 4

Существует небольшая разница между основными ответами, а именно SUM(case when kind = 1 then 1 else 0 end) и SUM(kind=1).

Когда все значения в столбце kind, случается, NULL, результат SUM(case when kind = 1 then 1 else 0 end), 0 SUM(kind=1) NULL SUM(case when kind = 1 then 1 else 0 end), SUM(case when kind = 1 then 1 else 0 end) является 0, в то время как результат SUM(kind=1) является NULL.

Пример (http://sqlfiddle.com/#!9/b23807/2):

Схема:

CREATE TABLE Table1
('first_col' int, 'second_col' int)
;

INSERT INTO Table1
    ('first_col', 'second_col')
VALUES
       (1, NULL),
       (1, NULL),
       (NULL, NULL)
;

Результаты запроса:

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

Ответ 5

Из MYSQL я решил проблему следующим образом:

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

Надеюсь, это поможет: D

Ответ 6

Стоит отметить, что вы можете опираться на ответ Гевина Тауэйса, используя несколько полей в запросе, например:

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

Вы также можете использовать этот синтаксис для COUNT и я уверен, что другие функции также.