首页 > 解决方案 > 使用 group by 和多个“count”查询

问题描述

我有一个 MySQL 表,其中包含一些唯一代码,这些代码按名为tag. 每个代码代表 MySQL 表中的一行,并有一个称为整数列used(值为 0 或 1)。

我的目标是进行查询以列出所有标签以及该特定标签的代码总数、已使用代码数 ( used= 1) 和未使用代码数 ( used= 0)。

我可以使用以下查询从“代码”表中检索标签列表:

SELECT tag FROM codes WHERE user_id = ? GROUP BY tag;

最终结果将如下所示:

但我想知道我是否可以在一个查询中实现我的目标。你能在这一点上提供帮助吗?

谢谢!

标签: mysqlsqlgroup-by

解决方案


您可以使用条件聚合,例如

SELECT tag, 
       SUM(used = 1) AS used_codes, 
       SUM(used = 0) AS unused_codes, 
       COUNT(*) AS total_codes 
  FROM codes 
 WHERE user_id = ? 
 GROUP BY tag;

推荐阅读