1

このようなことをしないと

2012 年 6 月 29 日午前 10:17 に編集 私のクエリはサンプル クエリよりも少し複雑であり、現在の提案は機能しないことに気付きましたが、それは私のせいです。元のクエリよりも正確なクエリを作成しました。

SELECT DISTINCT
a,
max(b) as b,
(select count(distinct c) as c from d where e=2) as c
FROM d
GROUP BY a

d からのサンプル データ

 a | b | c | e
---+---+---+---
 0 | 0 | 0 | 1
 0 | 0 | 0 | 2
 1 | 0 | 0 | 1
 1 | 0 | 0 | 1

したがって、このデータ セットの場合、a = 0 の場合、c はカウント 1 (e==1) になり、a = 1 の場合、c はカウント 2 (e==1) になります。

編集の終わり

SELECT
a,
b,
(SELECT c from d where e=2)
FROM d

または、少なくともこのパフォーマンスを賢く行うためのより良い方法はありますか? おそらく組合のように。

4

3 に答える 3

2

あなたが何を求めているのか理解できれば、これはうまくいくでしょう:

SELECT
  a,
  b,
  case
    when e=2 then c
    else null
  end as c
FROM
  d
于 2012-06-29T14:07:09.917 に答える
0

私が理解しているように、あなたはでグループ化したいと思いますa。グループごとに、の最大値が必要でbあり、行内のの個別の値の数を知りたい場合はce=2

他の回答は、使用する上で正しい考えをCASE持っていますが、明確な値を数えようとしていることに対処していません。私はこれがあなたが探しているものだと思います:

SELECT a, MAX(b), COUNT(DISTINCT CASE WHEN e=2 THEN c else NULL end)
  FROM d
  GROUP BY a

(現時点でのあなたの質問は、あなたのe後にある値が1であるか2であるかについては不明です。私は、上記のクエリで2を使用しました。)

于 2012-06-29T20:40:09.180 に答える
0

新しい情報に基づいて、これを試してください:

SELECT a,
       max(b) as b,
       sum(case when e=2 then 1 else 0 end) as c
FROM d 
GROUP BY a
于 2012-06-29T14:17:25.533 に答える