帮助编写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;
如果你想要的标签名,你需要加入的表,但不会出现在这里是如此。
答
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
如果算上(TAG_ID),您的查询将运行得更快,需要更少的开销。 – tsilb 2009-08-19 13:22:31
我认为这取决于DBMS,@ tslib。 DB2/z执行计划将其显示为只需要tag_links.tag_id的索引访问权限。其他较小的数据库管理系统'可能并不那么聪明:-)就我所知,SQL92标准并不遵循count(*)的“忽略空值”规则,仅针对count(列),因此智能DBMS只会得到无论如何,可见行中的tag_id列。 – paxdiablo 2009-08-19 13:54:18