The nobel table can be used to practice more SUM and COUNT functions./ja

From SQLZOO
Jump to navigation Jump to search
Language:Project:Language policy English  • 日本語 • 中文

ノーベル賞: 集計関数

このチュートリアルは COUNTSUMAVGのような集計関数に関するものである。

練習

参照 MAX, AVG, DISTINCT と ORDER BY

全受賞者数を表示する

SELECT COUNT(winner) FROM nobel
SELECT COUNT(winner) FROM nobel

各分野subjectが1回だけ登場するリストを表示する

SELECT DISTINCT subject FROM nobel

物理学賞Physicsの受賞トータル数を表示する

nobel(yr, subject, winner)  
SELECT COUNT(subject) FROM nobel
  WHERE subject='Physics'

こちらを参照 Using GROUP BY and HAVING./ja

各分野ごとに分野と受賞数を表示する

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

各分野の初受賞の年を表示する

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

2000年の各分野の受賞数を表示する

nobel(yr, subject, winner)  
SELECT subject,COUNT(yr)
FROM nobel
WHERE yr=2000
GROUP BY subject

こちらを参照 aggregates with DISTINCT/ja.

各分野の異なる受賞者の人数を表示する(同一人物の複数回受賞は1名と数える)

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

各分野に何年間受賞者がいたか表示する

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

HAVINGを使う。

物理学賞Physicsが3人の年を表示する

nobel(yr, subject, winner)  
SELECT yr
FROM nobel
WHERE subject='Physics'
GROUP BY yr
HAVING COUNT(winner)=3

受賞回数が2回以上の受賞者を表示する

nobel(yr, subject, winner)  
SELECT winner
FROM nobel
GROUP BY winner
HAVING COUNT(yr) > 1

複数の分野で受賞した人を表示する

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

GROUP BY yr, subjectの問題

2000年以降で受賞者が3人いる分野の年と分野を表示する(訳注:GROUP BYは並び順に影響することに注意)

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