テーブルがあるとします:
col1, col2, col3
1 0 1.3
0 0 0
0 1 0
1 1.5 1
ここで、各行に次のように計算された「重み」があるとします。
(col1 > 0 ? 1 : 0) + (col2 > 0 ? 1 : 0) + (col3 > 0 ? 1 : 0)
すべての行の合計重量を選択するにはどうすればよいですか?
私が与えたデータでは、総重量は 2+0+1+3=6 です
SUM()
no なしですべての条件を囲む1 つの集計が必要ですGROUP BY
。
SELECT
SUM(
(CASE WHEN col1 > 0 THEN 1 ELSE 0 END)
+ (CASE WHEN col2 > 0 THEN 1 ELSE 0 END)
+ (CASE WHEN col3 > 0 THEN 1 ELSE 0 END)
) AS total_weight
FROM your_table
http://sqlfiddle.com/#!2/b0d82/1
CASE WHEN...
任意の RDBMS 間で移植可能であるため、ここで使用しています。ただし、MySQL は条件に対してブール値の 0 または 1 を返すため、MySQL では次のように簡略化できます。
SELECT
SUM(
(col1 > 0) /* returns 1 or 0 */
+ (col2 > 0)
+ (col3 > 0)
) AS total_weight
FROM your_table