Сумма значений одной строки? - PullRequest
22 голосов
/ 01 февраля 2010

У меня есть запрос MySQL, который возвращает одну строку, состоящую из 1 и 0. Это для индикатора индикатора выполнения. Теперь у меня есть суммирование в коде, но я попытался суммировать значения в запросе и понял, что не могу использовать SUM (), потому что это много столбцов, а всего одна строка.

Есть ли способ, которым я могу суммировать это автоматически в запросе? Это так:

item_1 | item_2 | item_3 | item_4
-------+--------+--------+--------
     1 |      1 |      0 |      0

Редактировать: я забыл упомянуть, item_1 и т. Д. Не являются простыми значениями полей, но каждое из них является скорее выражением, таким как SELECT IF( field_1 = 1 and field_2 IS NOT NULL, 0, 1 ) AS item_1 ..., поэтому мне кажется, что я должен выполнить вложенный запрос:

SELECT ( item_1 + item_2 ... ) FROM ( SELECT IF( field_1 = y and field_2 IS NOT NULL, 1, 0 ) AS item_1 ... ) AS alias

Правильно?

Ответы [ 2 ]

48 голосов
/ 01 февраля 2010
select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable

Если могут быть нулевые значения, вам нужно обработать их следующим образом:

select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
5 голосов
/ 01 февраля 2010

Вы не можете сделать это проще, чем:

SELECT item_1 + item_2 + item_3 + item_4
FROM Table1

Если у вас много столбцов, тогда для ввода потребуется некоторое время. Я думаю, что создание таблицы тоже заняло довольно много времени.

В будущем ваши таблицы будут разрабатываться по-разному, чтобы каждая стадия процесса представляла собой строку, а не столбец. Другими словами, вместо этого:

id, item_1, item_2, item_3, item_4

Ваш стол может выглядеть так:

id, item_number, value

И тогда вы можете запросить его так:

SELECT SUM(value)
FROM Table1
WHERE id = @id

На самом деле, вам, вероятно, даже не нужен столбец значений. Наличие или отсутствие строки достаточно информации. Таким образом, ваш запрос становится:

SELECT COUNT(*)
FROM Table1
WHERE id = @id

Возможно, на этот раз для вас уже немного поздно, но если у вас все еще есть шанс изменить дизайн, возможно, стоит подумать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...