3

テーブルがあるとします:

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 です

4

1 に答える 1

5

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

http://sqlfiddle.com/#!2/b0d82/2

于 2013-01-20T22:01:36.033 に答える