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通过拥有计数组的主要内容,如果未能解决你的问题,请参考以下文章

mysql按组计数

MySQL:按连续天分组并计数组

如何查找数组计数值,在这里我找出数组的数量,但我想要总数组值

如何使用 MySQL 表示分区上的组计数

MYSQL:每个用户的组计数特定列?

MongoDB $reduce(aggregation) 组与数组中嵌套文档的总和并按组计数