【发布时间】:2011-02-10 00:13:20
【问题描述】:
(
SELECT root_tags.tag_id, root_tags.tag_name, COUNT( root_tagged.pg_id )
FROM root_tags
LEFT JOIN root_tagged ON ( root_tagged.tag_id = root_tags.tag_id )
LEFT JOIN root_pages ON ( root_pages.pg_id = root_tagged.pg_id )
LEFT JOIN root_granted ON ( root_granted.pg_id = root_tagged.pg_id )
WHERE root_pages.parent_id = '5'
AND root_granted.mem_id = '3'
GROUP BY root_tags.tag_id
ORDER BY 3 DESC
)
UNION
(
SELECT root_tags.tag_id, root_tags.tag_name, COUNT( root_tagged.pg_id )
FROM root_tags
LEFT JOIN root_tagged ON ( root_tagged.tag_id = root_tags.tag_id )
LEFT JOIN root_pages ON ( root_pages.pg_id = root_tagged.pg_id )
WHERE root_pages.parent_id = '5'
AND NOT EXISTS (
SELECT *
FROM root_granted
WHERE root_granted.pg_id = root_pages.pg_id )
GROUP BY root_tags.tag_id
ORDER BY 3 DESC
)
上面的查询返回如下结果,
tag_id tag_name COUNT(root_tags.tag_id)
16 expert-category-c 2
14 expert-category-a 1
15 expert-category-b 1
16 expert-category-c 1
如您所见,tag_id 16 重复了,我如何重写查询以使tag_id 16 的计数为3,我的意思是我希望查询应该返回这样的结果,
tag_id tag_name COUNT(root_tags.tag_id)
16 expert-category-c 3
14 expert-category-a 1
15 expert-category-b 1
我尝试使用此查询,但它返回错误...
(
SELECT root_tags.tag_id, root_tags.tag_name, COUNT( root_tagged.pg_id )
FROM root_tags
LEFT JOIN root_tagged ON ( root_tagged.tag_id = root_tags.tag_id )
LEFT JOIN root_pages ON ( root_pages.pg_id = root_tagged.pg_id )
LEFT JOIN root_granted ON ( root_granted.pg_id = root_tagged.pg_id )
WHERE root_pages.parent_id = '5'
AND root_granted.mem_id = '3'
)
UNION
(
SELECT root_tags.tag_id, root_tags.tag_name, COUNT( root_tagged.pg_id )
FROM root_tags
LEFT JOIN root_tagged ON ( root_tagged.tag_id = root_tags.tag_id )
LEFT JOIN root_pages ON ( root_pages.pg_id = root_tagged.pg_id )
WHERE root_pages.parent_id = '5'
AND NOT EXISTS (
SELECT *
FROM root_granted
WHERE root_granted.pg_id = root_pages.pg_id )
)
GROUP BY root_tags.tag_id
ORDER BY 3 DESC
您能告诉我如何完成这项工作吗?
谢谢。
【问题讨论】:
标签: sql mysql count group-by union