質問

いくつかのデータを要約するクエリを書いています。テーブルには基本的にブール値のフラグがあります。そのため、1つの値に基づいた合計とカウントが必要で、他の値にも同じことが必要です。

select
   location
  ,count(*)
  ,sum(duration)
from my.table
where type = 'X'
  and location = @location
  and date(some_tstamp) = @date
group by location

そしてtype列の別の値についても同じです。このテーブルを2回結合する場合、各テーブルの集計のみを取得できるようにグループ化するにはどうすればいいですか、つまりcount(*)ではなくcount(a。 * )...

2つの別個のクエリを作成する方が良いでしょうか?

編集

皆さん、ありがとうございます。しかし、それは私が意図したことではありません。 type = 'X'のサマリーとtype = 'Y'のサマリーを別々に取得する必要があります...より良い例を投稿してください。私が意味したのは次のようなクエリでした:

select
   a.location
  ,count(a.*)
  ,sum(a.duration)
  ,count(b.*)
  ,sum(b.duration)
from my.table a, my.table b
where a.type = 'X'
  and a.location = @location
  and date(a.some_tstamp) = @date
  and b.location = @location
  and date(b.some_tstamp) = @date
  and b.type = 'Y'
group by a.location

グループ化するには何が必要ですか?また、DB2はcount(a。 * )を好まず、構文エラーです。

役に立ちましたか?

解決


select
   location
  ,Sum(case when type = 'X' then 1 else 0 end) as xCount
  ,Sum(case when type = 'Y' then 1 else 0 end) as YCount
  ,Sum(case when type = 'X' then duration else 0 end) as xCountDuration
  ,Sum(case when type = 'Y' then duration else 0 end) as YCountDuration
from my.table
where 
location = @location
  and date(some_tstamp) = @date
group by location

これはSQL Serverで動作するはずです。 db2にも同様のものがあるはずです。

編集:レコードを制限するwhere条件を追加して、タイプ= Xまたはタイプ= Yを選択します(" type" XとY以外の値を持つことができます。

他のヒント

結合の例はあまり意味がありません。 AとBの間でデカルト積を行っています。これは本当に必要ですか?

以下は、WHERE句を満たす各ペアのcount(*)およびsum(duration)を検索します。あなたの説明に基づいて、これはあなたが探しているもののように聞こえます:

select
   type
  ,location
  ,count(*)
  ,sum(duration)
from my.table
where type IN ('X', 'Y')
  and location = @location
  and date(some_tstamp) = @date
group by type, location

カウントを機能させるには、count(a。*)の代わりにcount(a.location)または他のnull以外の列を実行します(PKが理想的です)。

主な質問については、上記のshahkalpeshまたはGeorge Eadonの回答のいずれかが有効です。この例では、テーブルを2回結合する理由はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top