帮助编写SQL查询来算

问题描述:

我有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的一点点知识,我试着写,但:(

谢谢。

你甚至不需要为这个表连接表,因为你想要的所有信息都在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

SELECT tag_id, COUNT(*) AS times_occurred 
FROM tag_links 
GROUP BY tag_id 

select id,count(*) from tags inner join tag_links on tags.tag_id = tag_links.tag_id 
group by id 

SELECT tag_id, 
     Count(*) As times_occurred 
FROM  tag_links 
GROUP BY tag_id 
+0

你太晚了:(其他人都喜欢用代码生成工具来编写sql查询::D – 2009-08-19 13:29:42