这可以是嵌套查询吗

时间:2019-02-04 06:18:08

标签: sql sql-server tsql

在美国和加拿大都有海岸线的五大湖的海岸线的名称和长度(按美国降序排列)是什么。

我使用的表格有三列,IN_COUNTRY(美国或加拿大是湖泊),ON_LAKE(湖泊的名称,如密歇根湖)和SHORELINE(每个国家的海岸线长度)

我尝试了下面列出的SQL,但是在美国无法按SHORELINE的长度对其进行排序。如您所见,我现在只能根据两个国家/地区的海岸线来对它们进行排序。

SELECT ON_LAKE, sum(SHORELINE) AS SHORELINE
FROM SHORE
GROUP BY ON_LAKE
HAVING count(IN_COUNTRY) > 1
ORDER BY SHORELINE DESC

我认为嵌套的SQL可能会有所帮助,但已经在这里停留了一段时间

图片:

enter image description here

3 个答案:

答案 0 :(得分:1)

如果您想使用聚合方法,那么我们可以尝试以下方法:

SELECT ON_LAKE, SUM(SHORELINE) AS SHORELINE
FROM SHORE
GROUP BY ON_LAKE
HAVING MIN(IN_COUNTRY) = 'Canada' AND MAX(IN_COUNTRY) = 'United States'
ORDER BY
    SUM(CASE WHEN IN_COUNTRY = 'United States' THEN SHORELINE ELSE 0 END) DESC;

enter image description here

Demo

答案 1 :(得分:1)

尝试这样的事情:

SELECT ON_LAKE, sum(SHORELINE) AS SHORELINE
FROM SHORE
GROUP BY ON_LAKE
HAVING count(IN_COUNTRY) > 1
ORDER BY sum(CASE WHEN IN_COUNTRY='United States' THEN SHORELINE ELSE 0 END) DESC

我只更改了ORDER BY子句以计算美国的岸长。

答案 2 :(得分:0)

尝试一下,

SELECT ON_LAKE,  sum(SHORELINE)
FROM SHORE
where IN_COUNTRY='Canada' and IN_COUNTRY='United States'
Group By ON_LAKE
ORDER BY sum(SHORELINE) DESC