MySQL COUNT 与 group by 或 distinct

标签 mysql

我有表“objects”:

id (int)
name (varchar)
group_id (varchar) default null

我做了一些插入:

insert into objects values
(null, 'Cat', null),
(null, 'Dog', null),
(null, 'Mouse', 'AAA'),
(null, 'Eagle', 'BBB'),
(null, 'Elephant', null),
(null, ' Bull', 'AAA');

我需要计算总行数。但是,group_id 为“AAA”的两行应合并为一行。 在上面的例子中,“count”应该返回“5”。这是因为:

  • “group_id”字段有 3 行的值为 NULL
  • group_id 为“BBB”的行“出现”了 1 次
  • group_id 为“AAA”的行“出现”了 1 次

使用 group_id 进行计数似乎不是解决方案,因为它返回 3 行,并且对于每一行它都给出一个计数。我只需要总行数。

使用 DISTINCT 似乎也无济于事。查询:

select count(distinct(group_id)) from objects;

返回值为“2”的行

最佳答案

使用条件分组:

SELECT COUNT(*) FROM objects 
GROUP BY CASE
    WHEN group_id IS NULL THEN id
    ELSE group_id
    END

关于MySQL COUNT 与 group by 或 distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33096413/

相关文章:

php - PHP 和 MYSQL 制作搜索页面时遇到的问题

mysql - MySQL单个单词列的 bool 模式搜索

mysql - 如何更新mysql表中存储的行顺序?

mysql - 菜鸟mysql加入问题

mysql - project_measures 表最近变得很大,如何修剪

php - make :auth 后迁移 Laravel 时出错

MySQL ORDER BY 和 MIN

sql - 将数据库从 MS SQL 迁移到 MySql - 耗时/困难程度如何?

php - MySQL 查询匹配项帮助

mysql - 找出哪个 Unicode