1

以下は私のテーブルスキーマです。

チャネル一覧表:

    CHAN_NUMBER  CHAN_NAME   CHAN_TYPE
 ----------- -----------------------------------
      1 MTV                   Music
      2 ESPN                  Sports
      3 TNT                   Movies
      4 Fox                   Movies
      5 Fox                   Sports

顧客調査表:

   SURV_ID SURV_DATE SURV_FAV_CHAN CUST_NUMBER
 ---------- --------- ------------- -----------
     1     25-NOV-12             1           2
     2     24-NOV-12             2           1
     3     24-NOV-12             3           3
     4     24-NOV-12             4           4
     5     24-NOV-12             5           5
     6     24-NOV-12             1           6
     7     24-NOV-12             2           7
     8     24-NOV-12             3           8
     9     24-NOV-12             4           9
    10     24-NOV-12             5          10
    11     24-NOV-12             1          11

私はこれらの 2 つのテーブルを持っており、すべてのリストとその数をリストするレポートを生成する必要channelがありcount ofます。customersselected that channelfavorite

Oracle データベースでは、チャネルが SURVEY テーブルからお気に入りとして選択されるたびにカウントを生成するところまで来ました。しかし、それらを結合しchannel numberて、 、 、nameおよびcount of customersをお気に入りとして選択したチャンネルのリストを作成する方法がわかりません。

-- my channel table query


SELECT CHAN_NUMBER, CHAN_NAME FROM CHANNEL;


-- here is how I'm generating the couNt


SELECT COUNT(SURV_FAV_CHAN) FROM SURVEY
GROUP BY SURV_FAV_CHAN HAVING COUNT(SURV_FAV_CHAN) > 1;

どんな助けでも素晴らしいでしょう。

4

3 に答える 3

2

このリファレンスを確認してください * SQLFIDDLE

すべてのチャネルをリストし、そのチャネルをお気に入りとして選択した顧客の数を数えたいとおっしゃいました。

入れ子から外側に行きましょう。Surveryでグループ化されたテーブルから顧客の数をカウントするネストされたクエリfavourite channel。すべてのチャネルは、すべてのレコードを取得するためLEFT JOINに on table を実行する必要があることを意味します。Channels

クエリ:

(select c.*, s.ct from 
channel c
left join
(select count(cust_number) as ct
 , surv_fav_chan from survey
group by surv_fav_chan) as s
on c.chan_number = s.surv_fav_chan
;

結果:

CHAN_NUMBER     CHAN_NAME   CHAN_TYPE   CT
1               MTV         Music       3
2               ESPN        Sports      2
3               TNT         Movies      2
4               Fox         Movies      2
5               Fox         Sports      2

FOXあなたは、 2 つの異なるタイプの番組を提供する 2 つのチャンネルとして扱っているようです。なのでそのままにしておきました。チャネルの種類ごとに顧客を数えたい場合は、明確にしてください。

PS: その SQLFIDDLE テーブル サンプルの他の古いテーブル スキーマは無視してもかまいません。これは MYSQL にあることに注意してください。ただし、これはANSIクエリであるため、ORACLE にも適用できます。

于 2012-12-15T20:20:53.973 に答える
1

SURV_FAV_CHANCHAN_NUMBERが関係であると仮定すると、それを に使用してJOIN、これを試してください:

SELECT CHAN_NUMBER
     , CHAN_NAME
     , COUNT(DISTINCT SURVEY.CUST_NUMBER) AS FAV_CHANNEL_CNT
FROM   CHANNEL
LEFT JOIN SURVEY
ON     SURVEY.SURV_FAV_CHAN = CHANNEL.CHAN_NUMBER
GROUP BY CHAN_NUMBER, CHAN_NAME
于 2012-12-15T20:29:33.123 に答える
1

次のようなことを試すことができます:

SELECT MAX(CH.CHAN_NUMBER), MAX(CH.CHAN_NAME), COUNT(SRV.SURV_FAV_CHAN) FROM SURVEY SRV  
LEFT JOIN CHANNEL CH ON CH.CHAN_NUMBER = SRV.SURV_FAV_CHAN
GROUP BY SRV.SURV_FAV_CHAN HAVING COUNT(SRV.SURV_FAV_CHAN) > 1;

そして、あなたが正しく質問したことを理解していれば、顧客の総数が本当に必要な場合は、SUM(SRV.SURV_FAV_CHAN) を使用することをお勧めします。

于 2012-12-15T20:12:17.247 に答える