У меня есть запрос MySQL, который возвращает одну строку, которая является рядом 1 с и 0s. Это для индикатора индикатора выполнения. У меня есть подведение итогов его в коде теперь, но я попытался суммировать значения в запросе и понял, что не мог использовать СУММУ (), потому что они - много столбцов, но всего одна строка.
Существует ли способ, которым я могу суммировать это автоматически в запросе? Это похоже на это:
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
Корректный?
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
Вы не можете сделать это проще, чем:
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
Возможно, на этот раз для вас немного поздно, но если у вас все еще есть шанс изменить дизайн, возможно, стоит подумать об этом.