2014-02-23 29 views
-2

自從第一次獲獎以來,我擁有諾貝爾獎獲得者數據庫。數據的來源是:http://www.aggdata.com/awards/nobel_prize_winners諾貝爾獎得主數據庫

它有一個單獨的表,所以沒有外鍵或任何ER。

該表格包含以下12列:年份,類別,名稱,出生日期,出生地,縣,居住地,角色/會員,字段/語言,獎品名稱,動機。

顯然,對於類別,如物理,醫學等多個贏家

我一直想看看使用查詢每個類別的諾貝爾獎得主每十年的數量。我希望我的結果表看起來像:

______________________________________________ 
1960-1969 Peace 9 winners 
1960-1969 Physics 19 winners 
.............................................. 
1970-1979 Peace 6 winners 
1960-1969 Physics 12 winners 
.............................................. 
______________________________________________ 

這可以通過MySQL中的查詢嗎?

非常感謝您的關注。謝謝大家/

+6

它可以毫無疑問要完成。你能編輯你的問題並提供你正在使用的表格的佈局嗎? –

+0

「諾貝爾獎得主數據庫」是MySQL數據庫嗎?現有的表格是否包含必要的信息?如果你對這兩個問題回答「是」,那麼這是可能的。 –

+0

我使用的數據庫來自:http://www.aggdata.com/awards/nobel_prize_winners。它具有以下字段:年 類別 名稱 生日 出生地點 出生國家 住宅 角色/附屬 場/語言 獎項名稱 動機 – user3344580

回答

0

這裏是一個更SQL的方式來做到這一點:

select concat(floor(npw.year/10)*10, '-', floor(npw.year/10)*10+9) as decade, 
     npw.category, 
     count(*) as winners 
from NobelPriceWinners npw    
group by floor(npw.year/10), npw.category 
order by decade, category; 

這將產生三列如:

Decade Category Winners 
1960-1969 Peace   9 
1960-1969 Physics  19 
. . . 
+0

喜登,感謝,但不知是得到了來自查詢以下結果:
十年\t類別\t贏家 190-199 \t化學 191-200 \t化學 192-201 \t化學 193- 202 \t \t化學56 194-203 \t \t化學43 195-204 \t \t化學72 196-205 \t \t化學79 197-206 \t \t化學104 198-207 \t \t化學97 199-208 \t \t化學104 200-209 \t \t化學123 201-210 \t \t化學11 – user3344580

+0

這應該是'在* 10' 'select'。 –

+0

是的,我得到了幾十年來所需的團體(即1900-1910,1911-1920等)。但是,關於爲什麼'化學'是在每一行的任何線索。再次感謝。 – user3344580

0

下面是一些建議:

假設你要代表十年如XXX0-xxx9,並假設award_date是DATE數據類型,您可以使用表達式來獲得今年的前三個字母:

SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3) 

這樣的查詢可能會讓您開始。

SELECT CONCAT(s.ccy,'0-',s.ccy,'9') AS decade 
    , s.category 
    , CONCAT(s.count_winners,' winners') AS winners 
    FROM ( 
     SELECT SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3) AS ccy 
       , t.category 
       , COUNT(1) AS count_winners 
      FROM mytable t 
      WHERE t.award = 'winner' 
      GROUP 
      BY SUBSTR(DATE_FORMAT(t.award_date,'%Y'),1,3) 
       , t.category 
     ) s 

內聯視圖別名爲s確實繁重得到結果,外部查詢做了一些格式。

請注意,此查詢不會返回任何「零」計數。

如果您還需要爲所有幾十年的所有類別包括「零」計數,那麼也可以通過引入「所有類別」和「所有十年」的行來源,然後進行交叉在這些和左連接之間加入內聯視圖,別名爲s

上面的查詢不返回包括 「0」 算