1

サブクエリの結果を、サブクエリからの情報をカウントしてグループ化する外部クエリの派生テーブルとして使用しようとしています。これは私の SQL のノウハウの一部であり、オンラインで複数の例を見ているにもかかわらず、構文を正しく理解できていません。

サブクエリは次のとおりです。

SELECT rname.rn_country AS country, rname.rn_index AS id, sum(rresults.rr_sec_total) AS time 
FROM rname 
INNER JOIN rresults AS rresults ON rname.rn_index = rresults.rr_rn_index 
WHERE     rn_view = 'true'
     AND rr_date = '6/6/2012'
     AND (rr_slide = 'standard' OR rr_slide = 'water')
GROUP BY rn_index, rn_country
HAVING SUM (rresults.rr_sec_total) >= 18000

この結果は次のとおりです。

国 ID 時間
缶 19700 57600
米国 451294 144600.9
米国 901260 39601.8
米国 934270 109800
デンマーク 913601 31800
米国 915011 108720.9

次に、(時間 >= 18000 および時間 <= 36000) がブロンズ、(時間 >= 36000 および <= 54000) がシルバー、時間 > 54000 がゴールドである ID の数をカウントする必要があります。国。したがって、上記の値の結果に基づくと、最終結果は次のようになります。

CAN: 1 ゴールド
DEN: 1 ブロンズ
USA: 3 ゴールド 1 シルバー

これを考えると、完全なクエリは何になる必要がありますか? 前もって感謝します。どんな助けでも感謝します。

4

1 に答える 1

1

次のように、個々の列のカウントを取得してみませんか。

SELECT 
    a.country,
    COUNT(CASE WHEN a.time > 54000 THEN 1 END) AS num_gold,
    COUNT(CASE WHEN a.time BETWEEN 36000 AND 54000 THEN 1 END) AS num_silver,
    COUNT(CASE WHEN a.time BETWEEN 18000 AND 36000 THEN 1 END) AS num_bronze
FROM
(
    SELECT rname.rn_country AS country, rname.rn_index AS id, sum(rresults.rr_sec_total) AS time 
    FROM rname 
    INNER JOIN rresults AS rresults ON rname.rn_index = rresults.rr_rn_index 
    WHERE rn_view='true' AND rr_date='6/6/2012' AND (rr_slide='standard' OR rr_slide='water')
    GROUP BY rn_index, rn_country having sum(rresults.rr_sec_total) >= 18000
) a
GROUP BY a.country
于 2012-07-11T22:08:06.330 に答える