一連の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
_
正しい?
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
あなたは本当にそれよりも簡単にすることはできません:
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
今回はおそらく少し遅れますが、デザインを変更する機会がまだある場合は、これを検討する価値があるかもしれません。