web-dev-qa-db-ja.com

単一の行の値を合計しますか?

一連の1と0である単一の行を返すMySQLクエリがあります。プログレスバーインジケーター用です。私はコードでそれを合計していますが、クエリの値を合計しようとしましたが、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
_

正しい?

23
user151841
select item_1 + item_2 + item_3 + item_4 as ItemSum
from MyTable

Null値が存在する可能性がある場合は、次のように処理する必要があります。

select ifnull(item_1, 0) + ifnull(item_2, 0) + ifnull(item_3, 0) + ifnull(item_4, 0) as ItemSum
from MyTable
48
RedFilter

あなたは本当にそれよりも簡単にすることはできません:

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

実際、おそらくvalue列も必要ありません。行の有無は十分な情報です。したがって、クエリは次のようになります。

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

今回はおそらく少し遅れますが、デザインを変更する機会がまだある場合は、これを検討する価値があるかもしれません。

5
Mark Byers