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

这个结果是:

国家身份证时间
可以 19700 57600
美国 451294 144600.9
美国 901260 39601.8
美国 934270 109800
书房 913601 31800
美国 915011 108720.9

然后我需要做的是计算 ID 的数量,其中(时间 >= 18000 和时间 <= 36000)是青铜,(时间 >= 36000 和 <= 54000)是白银,时间 > 超过 54000 是黄金,按以下方式分组国家。因此,根据上述值的结果,最终结果将是:

CAN:1 金
DEN:1 铜
美国: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 回答