mysql - 通过在一个简单的表上使用 MySql 进行三次计数和分组......是否可以在一个查询中进行?

标签 mysql sql count group-by

我有一个问题可以用一个简单的虚构表格来解释。

“饮料”表只有三个字段:

  • Id (1..N) - 主键
  • Date ('2012-09-19'...) - 每个日期都可以经常出现
  • 热门(1 表示是,0 表示否)。

我想生成这样的列表:

    Date         Total    Hot    Cold
    2012-09-19   14       6      8
    2012-09-10   21       18     3

等等

字段“冷”如您所料计算为(总计 - 热)。

到目前为止我得到的是:

    SELECT Date, count(*) AS Total FROM Drinks GROUP BY Date;

这给了我想要的表格,但当然没有“热”和“冷”列。

有没有办法修改我的查询,以便我可以一次生成此表?我当然可以使用 PHP 代码分阶段构建表格,但这可能不是优雅的方式,也不是最快的方式。

我很高兴观看和学习...:)

最佳答案

您可以在 SELECT 子句中添加 CASE 语句。

SELECT Date, 
       count(*) AS Total,
        SUM(CASE WHEN Hot = 1 THEN 1 ELSE 0 END) totlHOT,
        SUM(CASE WHEN Hot = 0 THEN 1 ELSE 0 END) totalCold
FROM Drinks 
GROUP BY Date;

关于mysql - 通过在一个简单的表上使用 MySql 进行三次计数和分组......是否可以在一个查询中进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497714/

相关文章:

java - Spring JdbcDao支持

PHP PDO SELECT LIMIT 问题

php - 连接从数据库返回的相等值

mysql - 使用 GROUP BY 将查询从 MySQL 转换为 Postgres 和 SQLite

python - 如何计算具有特定扩展名或名称的文件中的文件数?

SQL计数一列中的重复项,但重复项的条件不仅仅是一个固定值

php - 在 Zend\Db\Sql\Select 之后获取 SQL

mysql - 统计销售订单中 SKU 的所有出现次数

sql - 我如何从两个不同的表详细信息中求和?

mysql - COUNT 次获胜次数和 MAX 次使用 MySQL 获胜次数最多的参与者