2009-08-19 73 views
2

我有2個表如下:幫助編寫SQL查詢來算

tags: id, version, name 

tag_links: id, version, tag_id (foreign key to tags.id) 

我需要編寫一個返回每個TAG_ID在tag_links表中有多少次出現的SQL語句。

例如:

tags: 
    id version name 
    -- ------- ------ 
    1  1 sport 
    2  1 comedy 

tag_links: 
    id version tag_id 
    -- ------- ------ 
    1  1  1 
    2  1  1 
    3  1  1 
    4  1  2 
    5  1  2 

我需要的結果是:

tag_id times_occurred 
------ -------------- 
    1    3 
    2    2 

我有SQL的一點點知識,我試着寫,但:(

謝謝。

回答

8

你甚至不需要爲這個表連接表,因爲你想要的所有信息都在tag_links表中。

select tag_id, count(*) as times_occurred 
from tag_links 
group by tag_id; 

如果你想要的標籤,你需要加入的表,但不會出現在這裏是如此。

+4

如果算上(TAG_ID),您的查詢將運行得更快,需要更少的開銷。 – tsilb 2009-08-19 13:22:31

+1

我認爲這取決於DBMS,@ tslib。 DB2/z執行計劃將其顯示爲只需要tag_links.tag_id的索引訪問權限。其他較小的數據庫管理系統'可能並不那麼聰明:-)就我所知,SQL92標準並不遵循count(*)的「忽略空值」規則,僅針對count(列),因此智能DBMS只會得到無論如何,可見行中的tag_id列。 – paxdiablo 2009-08-19 13:54:18

3
SELECT tag_id, COUNT(*) AS times_occurred 
FROM tag_links 
GROUP BY tag_id 
0
select id,count(*) from tags inner join tag_links on tags.tag_id = tag_links.tag_id 
group by id 
0
SELECT tag_id, 
     Count(*) As times_occurred 
FROM  tag_links 
GROUP BY tag_id 
+0

你太晚了:(其他人都喜歡用代碼生成工具來編寫sql查詢::D – 2009-08-19 13:29:42