mysql通过拥有计数组
Posted
技术标签:
【中文标题】mysql通过拥有计数组【英文标题】:mysql count group by having 【发布时间】:2011-12-13 00:57:32 【问题描述】:我有这张桌子:
Movies (ID, Genre)
一部电影可以有多种流派,因此 ID 不是特定于流派的,它是多对多的关系。我想要一个查询来查找恰好有 4 种类型的电影总数。我当前的查询是
SELECT COUNT(*)
FROM Movies
GROUP BY ID
HAVING COUNT(Genre) = 4
但是,这会返回一个 4 的列表而不是总和。如何获取总和而不是 count(*)
的列表?
【问题讨论】:
【参考方案1】:一种方法是使用嵌套查询:
SELECT count(*)
FROM (
SELECT COUNT(Genre) AS count
FROM movies
GROUP BY ID
HAVING (count = 4)
) AS x
内部查询获取恰好有 4 种类型的所有电影,然后外部查询计算内部查询返回的行数。
【讨论】:
【参考方案2】:SELECT COUNT(*)
FROM (SELECT COUNT(*)
FROM movies
GROUP BY id
HAVING COUNT(genre) = 4) t
【讨论】:
【参考方案3】:也许
SELECT count(*) FROM (
SELECT COUNT(*) FROM Movies GROUP BY ID HAVING count(Genre) = 4
) AS the_count_total
虽然这不是所有电影的总和,但有多少电影有 4 种类型。
所以也许你想要
SELECT sum(
SELECT COUNT(*) FROM Movies GROUP BY ID having Count(Genre) = 4
) as the_sum_total
【讨论】:
我再次更新了它(v1),为语句设置别名,否则得到Every derived table must have its own alias
【参考方案4】:
怎么样:
SELECT COUNT(*) FROM (SELECT ID FROM Movies GROUP BY ID HAVING COUNT(Genre)=4) a
【讨论】:
最后一个'a'应该做什么? @EricVB 这是结果的列别名。 mysql 允许(还)省略关键字AS
。以上是关于mysql通过拥有计数组的主要内容,如果未能解决你的问题,请参考以下文章