MySQL:是否可以通过单个查询来做到这一点?

标签 mysql sql

我正在尝试在单个查询中执行两个不同的 SUM。

user   points   date_achieved
-----------------------------
Foo    10       2000-01-01
Foo    20       2011-11-18
Bar    10       2000-01-01
Bar    20       2011-11-15
Bar    30       2011-11-18

1)总分

SELECT user, SUM(points) AS points_total
FROM myTable
GROUP BY user

2) 过去一个月内累积的积分

SELECT user, SUM(points) AS points_month
FROM myTable
WHERE date_achieved >= CURRENT_DATE - INTERVAL 1 MONTH
GROUP BY user

使用单个查询实现此目的的最佳方法是什么?

非常感谢。

最佳答案

只需使用 case 语句,仅在满足您的条件时才计分。

SELECT 
       user, 
        SUM(points) AS points,
        SUM(case  
            when date_achieved >= (CURRENT_DATE - INTERVAL 1 MONTH) 
            THEN points 
             else 0 END) points_last_Month
FROM myTable
GROUP BY user

关于MySQL:是否可以通过单个查询来做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8189731/

相关文章:

php - 如何使用SELECT INTO OUTFILE写入/tmp以外的目录?

java - 使用 BasicDataSource 的 MYSQL 事务

Mysql TINYINT & VARCHAR 性能

mysql - 针对所有其他颜色生成颜色列表

mysql - sql - 从多个连接表中获取匹配行的计数

sql - 从以 root 身份运行的 shell 脚本以 oracle 用户身份运行 oracle 脚本

php代码工作不正确并且不查询数据库

php - 在 laravel 5 中搜索查询

sql - SQL查询的 Elasticsearch 替代方案?

sql - Postgres : How do I insert from another table and set a foreign key to the row afterwards?