[英]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 BY
在DISTINCT
实现的,但是我不知道如何在不执行此操作的情况下仅一次报告每个大陆。
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.