简体   繁体   English

如何在不使用group by的情况下获得此sql查询的相同结果?

[英]How to get same result for this sql query Without using group by?

I have a query which is as follows : 我有一个查询,如下所示:

SELECT CO.CONTINENT, FLOOR(AVG(CI.POPULATION))
FROM CITY CI INNER JOIN COUNTRY CO
ON CI.COUNTRYCODE = CO.CODE
GROUP BY CO.CONTINENT;

Now, I would want to get the same result but without using Group by as I am looking for an alternative for learning purpose. 现在,我想获得相同的结果,但不使用分组依据,因为我正在寻找一种替代的学习方式。 I am sure this can be achieved using subquery but I am unable to. 我确信可以使用子查询来实现,但是我做不到。

I have tried following ways: 我尝试了以下方法:

SELECT CO.CONTINENT, 
( SELECT FLOOR(AVG(CI2.POPULATION)) FROM CITY CI2 WHERE CI2.COUNTRYCODE = CO.CODE )
FROM CITY CI INNER JOIN COUNTRY CO
ON CI.COUNTRYCODE = CO.CODE;

or 要么

SELECT CO.CONTINENT, FLOOR(AVG(CI.POPULATION)) OVER(PARTITION BY CI.COUNTRYCODE)
FROM CITY CI INNER JOIN COUNTRY CO
ON CI.COUNTRYCODE = CO.CODE;

Try this: 尝试这个:

SELECT DISTINCT
    t.CONTINENT,
    (SELECT FLOOR(AVG(c2.POPULATION)) FROM COUNTRY c1 INNER JOIN CITY c2
     ON c1.CODE = c2.COUNTRYCODE WHERE c1.CONTINENT = t.CONTINENT) AS pop_avg
FROM COUNTRY t

By the way, DISTINCT sometimes is implemented under the hood using GROUP BY , but I don't know how to report each continent only once without doing this. 顺便说一句, DISTINCT有时是使用GROUP BYDISTINCT实现的,但是我不知道如何在不执行此操作的情况下仅一次报告每个大陆。

I don't really recommend this approach, but you can just do: 我真的不推荐这种方法,但是您可以这样做:

SELECT DISTINCT CO.CONTINENT, FLOOR(AVG(CI.POPULATION))
FROM CITY CI INNER JOIN
     COUNTRY CO
     ON CI.COUNTRYCODE = CO.CODE;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM