0

全て、

申し訳ありませんが、これはおそらく簡単なSQLの質問ですが、必要なものを取得するためにGoogle検索を作成する方法がわかりませんでした。

私はこのようなテーブルを持っています:

id   color  points
---  -----  ------
  1  red        10
  2  blue       20
  3  blue       30
  4  red       100
  5  blue       70
  6  blue      200
  7  red        30

私は2つのことを知りたいです:

  1. color ='red'の行はいくつあり、color ='blue'の行はいくつありますか?
  2. color ='red'、color='blue'の行の合計ポイント数はいくつですか。

count()、、、sum()およびを使用して、group by次のような結果セットを簡単に作成できます。

select
    color,
    count(color),
    sum(points)
from
    my_table
group by
    color

color  count  points
-----  -----  ------
red        3     140
blue       4     320

ただし、私が本当に必要としているのは、次のような1行の結果です。

red_count  red_points  blue_count  blue_points
---------  ----------  ----------  -----------
        3         140           4          320

価値があるのは-私の理想的なクエリは、不確定な数の異なる色を処理するために柔軟である必要はありません。常に2色しかないことを前提に100%OKです。

また、この例では、SQL Serverを使用していますが、ソリューションがそれに固有のものを使用していても問題ありません。(もちろん、一般的なSQLソリューションの方が優れています...)

前もって感謝します!

4

3 に答える 3

3

この一般的なクエリを試してください:

SELECT SUM(CASE WHEN color='red' THEN 1 ELSE 0 END) red_count
      ,SUM(CASE WHEN color='red' THEN points ELSE 0 END) red_points
      ,SUM(CASE WHEN color='blue' THEN 1 ELSE 0 END) blue_count
      ,SUM(CASE WHEN color='blue' THEN points ELSE 0 END) blue_points
FROM yourTable
于 2013-03-05T13:48:36.590 に答える
3
SELECT  SUM(CASE WHEN color = 'red' THEN 1 ELSE 0 END) red_count,
        SUM(CASE WHEN color = 'red' THEN points ELSE 0 END) red_points,
        SUM(CASE WHEN color = 'Blue' THEN 1 ELSE 0 END) blue_count,
        SUM(CASE WHEN color = 'Blue' THEN points ELSE 0 END) blue_points
FROM    tableName
于 2013-03-05T13:48:43.580 に答える
3

集計と式を使用してデータをピボットできます。CASE

select
  sum(case when color = 'red' then 1 else 0 end) red_count,
  sum(case when color = 'red' then points end) red_points,
  sum(case when color = 'blue' then 1 else 0 end) blue_count,
  sum(case when color = 'blue' then points end) blue_points
from my_table
于 2013-03-05T13:49:26.337 に答える