首页 > 解决方案 > 从一个月的 1-15 和 16-31 中选择总和

问题描述

SELECT
(SELECT
SUM(total)
FROM `earnings`
WHERE user_id = $userid
AND DATE_FORMAT(date_earn, ('%m')) = '11'
AND DATE_FORMAT(date_earn, ('%Y')) = '2020'
AND DATE_FORMAT(date_earn, ('%d')) <= '15')
as first,
(SELECT
SUM(total)
FROM `eearnings`
WHERE user_id = $userid
AND DATE_FORMAT(date_earn, ('%m')) = '11'
AND DATE_FORMAT(date_earn, ('%Y')) = '2020'
AND DATE_FORMAT(date_earn, ('%d')) >= '16')
as second
FROM `earnings`

我想做的是每个用户ID每个月都可以访问1-15和16-30的收入总和..

在我的结果中……通过这个查询,我得到了 100 多条具有相同值的记录……例如:

 first : 150 second: 300

如果我使用限制 1 ..查询只显示一条具有正确值的记录..我的问题是我的查询是好的还是我不匹配的东西,因为如果我运行每个查询分隔它只返回一行没有限制 1。谢谢寻求帮助!

标签: mysqlsql

解决方案


你有SELECT ... FROM earnings. 这为您在收益表中的每一行提供一个结果行。对于这些行中的每一行,您选择两个总和。一次又一次的相同的两个总和。如果您只是删除 final FROM earnings,这将告诉 DBMS 您只想要一行。

如前所述,还有其他方法可以编写此查询。我就是这样做的:

SELECT
  SUM( CASE WHEN DAYOFMONTH(date_earn) <= 15 THEN total END ) as first,
  SUM( CASE WHEN DAYOFMONTH(date_earn) >= 16 THEN total END ) as second
FROM earnings
WHERE user_id = $userid
AND date_earn >= DATE '2020-11-01'
AND date_earn <  DATE '2020-12-01';

推荐阅读