MYSQL在1个查询中获取2个日期之间的总和和总和

标签 mysql sql

我试图在一个查询中获取一列的总和以及两个日期之间同一列的总和。这可能吗?

我的表格是这样的:

uid|amount|date

我想做的两个查询之一:

SELECT sum(amount) as `keys` FROM tbl_keys WHERE uid = 1

SELECT sum(amount) as `keys` FROM tbl_keys WHERE uid = 1 AND YEAR(`date`) = YEAR(CURRENT_DATE)
AND MONTH(`date`) = MONTH(CURRENT_DATE)

最佳答案

您可以使用 UNION 查询:

SELECT 'All' AS cnt, sum(amount) as `keys` FROM tbl_keys WHERE uid = 1
UNION ALL
SELECT 'Current_month' AS cnt, sum(amount) as `keys`
FROM tbl_keys
WHERE
  uid = 1
  AND `date`<= last_day(current_date)
  `date`>= current_date - interval (day(current_date)-1) day

(我更喜欢在日期列上使用 >=<=,因为它可以使用索引(如果存在),而像 MONTH()YEAR() 这样的函数则不能,而且我假设 date是一个日期列,它不包含时间信息)。

如果您希望结果在一行中,您可以使用内联查询:

SELECT
  (SELECT sum(amount) as `keys` FROM tbl_keys WHERE uid = 1) AS total,
  (SELECT sum(amount) as `keys`
   FROM tbl_keys
   WHERE
     uid = 1
     AND `date`<= last_day(current_date)
    `date`>= current_date - interval (day(current_date)-1) day
   ) AS current_month

关于MYSQL在1个查询中获取2个日期之间的总和和总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34063336/

相关文章:

java - 当列表为 null 或为空时,JPA createQuery 将列表作为参数传递

mysql - 从子选择返回行

mysql - 优化 MySQL GROUP BY 查询

mysql - MySQL 触发器是否受到用户限制?

java - 计算每天的命中率

sql - 在 SQL 中计算校验和

sql - 如何在SQL Server Compact Edition 4上解决此查询性能

不使用 PHP 的 MySQL 查询循环帮助

mysql - 如果触发器和 View 的字符集与数据库的其余部分不匹配,会有什么后果?

sql - 将一列与两个表连接起来