SQL ZOO我的答案之群組函數

使用 SUM, Count, MAX, DISTINCT 和 ORDER BY.

1、展示世界的總人口

     SELECT SUM(population) FROM world;

2、列出所有的洲份, 每個只有一次。

     SELECT DISTINCT(continent) FROM world;

3、找出非洲(Africa)的GDP總和。

     SELECT SUM(gdp) FROM world WHERE continent='Africa';

4、有多少個國家具有至少百萬(1000000)的面積。

     SELECT COUNT(name) FROM world WHERE area>='1000000';

5、('France','Germany','Spain')(“法國”,“德國”,“西班牙”)的總人口是多少?

     SELECT SUM(population) FROM world WHERE name IN('France','Germany','Spain');

6、對於每一個洲份,顯示洲份和國家的數量。

     SELECT continent,COUNT(name) FROM world GROUP BY continent;

7、對於每一個洲份,顯示洲份和至少有1000萬人(10,000,000)口國家的數目。

     SELECT continent,COUNT(name) FROM world  GROUP BY continent HAVING population>=10000000;一定不能忘了GROUP BY....HAVING...

     或者

     SELECT continent,COUNT(name) FROM world WHERE population>=10000000 GROUP BY continent;

8、列出有至少100百萬(1億)(100,000,000)人口的洲份。

     SELECT continent FROM world A GROUP BY continent HAVING SUM(population)>=100000000;

     或者

     SELECT continent FROM world A WHERE (SELECT SUM(population) FROM world B WHERE A.continent=B.continent)>=100000000 GROUP BY continent;

Using SUM, COUNT, MAX, AVG, DISTINCT and ORDER BY.

1、找出總共有多少個獎頒發了。

     SELECT COUNT(subject) FROM nobel

2、列出每一個獎項(subject), 只列一次

     SELECT DISTINCT(subject) FROM nobel

3、找出物理獎的總頒發次數。

     SELECT COUNT(subject) FROM nobel WHERE subject='Physics'

4、對每一個獎項(Subject),列出頒發數目。

     SELECT subject,COUNT(winner) FROM nobel GROUP BY subject

5、對每一個獎項(Subject),列出首次頒發的年份。

     SELECT subject,MIN(yr) FROM nobel GROUP BY subject

6、對每一個獎項(Subject),列出2000年頒發的數目。

     select subject ,count(*)  from nobel  where yr =2000  group by subject;应该是先列出每个奖项,再计算2000年的颁发次数,有可能存在0的情况。这里职级算了2000颁发的各个奖项的数量。

7、對每一個獎項(Subject),列出有多少個不同的得獎者。

     SELECT subject,COUNT(DISTINCT(winner)) FROM nobel GROUP BY subject; 

8、對每一個獎項(Subject),列出有多少年曾頒發過。

     SELECT subject,COUNT(DISTINCT(yr)) FROM nobel GROUP BY subject;

9、列出哪年曾同年有3個物理獎Physics得獎者。

     SELECT yr FROM nobel WHERE subject='Physics' GROUP BY yr HAVING COUNT(

*)=3;

10、列出誰得獎多於一次。

     SELECT winner FROM nobel GROUP BY winner HAVING COUNT(*)>1;

11、列出誰獲得多於一個獎項(Subject)

     SELECT winner FROM nobel GROUP BY winner HAVING COUNT(DISTINCT(subject))>1;

12、哪年哪獎項,是同一獎項(subject)頒發給3個人。只列出2000年及之後的資料。

     SELECT yr,subject FROM nobel WHERE yr>=2000 GROUP BY subject,yr HAVING COUNT(winner)=3 ;

     (group by 一般和聚合函数一起使用才有意义,比如 count sum avg等.

     GROUP BY X意思是将所有具有相同X字段值的记录放到一个分组里。

     那么GROUP BY X, Y呢?

     GROUP BY X, Y意思是将所有具有相同X字段值和Y字段值的记录放到一个分组里。)

猜你喜欢

转载自blog.csdn.net/JaneHuang1/article/details/83181432