2011-06-01 88 views
1

我有兩個表(類型,playerid)和球員(playerid,日期) 我必須找出每年有多少人的比賽獎項是哪種類型的球員贏得的?幫助與SQL查詢連接?

如表應該像

year type  noofawards 
2011 batsmen  3 
2011 bowler  5 
2010 batsmen  2 

我能得到每年的獎項總數贏了,但不能分離它們類型,使我得到的是

year noofawards 
2011  3 


select year , count(year) as "Number of awards" 
from 
(
select to_char(p.date,'YYYY') as year 
from player p, type t 
where p.playerid = t.playerid 
) 
group by year 
order by year; 

我應該怎麼辦?

+1

類型(Type,playerid)和播放器(playerid,日期)......那麼,我們在哪裏能夠找到匹配記錄的人的呢? – mihsathe 2011-06-01 15:29:23

+0

您可以按多個字段進行分組(或「分隔」)。探索「group by」語法選項。 – 2011-06-01 15:29:28

+0

對不起,得到的獎項數量,我們必須計算保齡球,擊球手等 – user779214 2011-06-01 15:31:42

回答

1

你有沒有嘗試以下方法:

select to_char(p.date,'YYYY') as year 
    , type 
    , count(*) 
from player p, type t 
where p.playerid = t.playerid 
group by 1,2; 
+0

我需要安排他們每年明智這是我遇到我的問題。我不能指望的類型 – user779214 2011-06-01 15:37:17

+0

這仍然沒有給我一個類型的總量不板球運動員1 數量.... 結果我得到的是 2011板球運動員1 2011 Wheras我需要 2011板球運動員2 – user779214 2011-06-01 16:06:55

+0

根據所使用的RDBMS,我的Year和序號GROUP BY的別名可能會提出挑戰。使用列/別名引用的GROUP BY的ypercube的repsonse更強大。 – 2011-06-01 16:27:11

1

只需使用:

GROUP BY year 
     , type 

  • 大多數數據庫系統有一個函數(YEAR()或類似名稱)從日期提取一年。
  • 保留字段或表名稱,如date不是一個好主意。
  • 您還應該嘗試學習JOIN語法,而不是隱式加入WHERE

喜歡的東西:

SELECT YEAR(p.date) AS awardYear 
    , t.type 
    , COUNT(*) AS "Number of awards" 
FROM player p 
    JOIN type t 
    ON p.playerid = t.playerid 
GROUP BY awardYear 
     , t.type 
ORDER BY awardYear 
     , t.type ; 
+0

這仍然沒有給我一個類型.... 結果我得到的是 2011板球運動員1 2011板球運動員1 Wheras我需要 2011板球運動員2 – user779214 2011-06-01 16:03:21

+0

我能夠提取的一年....只是具有讓子查詢的工作增加了一個問題所有類型在一個類別下... 像總數沒有。在2011年贏得比賽的擊球手總數以及2011年贏得總冠軍的保齡球總數等等...... – user779214 2011-06-01 16:06:18

+0

好點的ypercube。 – 2011-06-01 16:27:56

1

由於這尖叫聲功課,我只會給提示。

您不需要使用子查詢,並且您需要在查詢的某個點實際選擇「類型」列。

+0

這就是爲什麼我要求幫助....而不是解決方案 – user779214 2011-06-01 16:05:03

+0

然後,我給你一個誠實的upvote。 許多學生來這裏尋找答案,並沒有幫助。很高興看到有人真正想要了解正在發生的事情。 – Limey 2011-06-02 17:34:54

0

這應該工作:

SELECT year, 
     type, 
     COUNT(*) as number 
FROM (
     SELECT type, 
       to_char(player.date,'YYYY') as year 
     FROM player 
     NATURAL JOIN type 
    ) AS T 
GROUP BY year, 
     type