我在mysql中有一个数据,在我的第一个表中看起来像这样。
ID | date_created | cost | project_id
1 2019-09-01 00:00:00 10 1
2 2019-09-02 00:00:00 20 1
3 2019-09-03 00:00:00 30 1
4 2019-09-04 00:00:00 40 1
5 2019-09-05 00:00:00 50 1
6 2019-10-01 00:00:00 20 5
7 2019-10-02 00:00:00 40 5
8 2019-10-03 00:00:00 60 5
9 2019-10-04 00:00:00 70 5
10 2019-10-12 00:00:00 80 5
这是我的第二张桌子
ID | date_created | usage | project_id
1 2019-09-01 00:00:00 10 1
2 2019-09-02 00:00:00 20 1
3 2019-09-03 00:00:00 30 1
4 2019-09-04 00:00:00 40 1
5 2019-09-05 00:00:00 50 1
6 2019-10-01 00:00:00 20 5
7 2019-10-02 00:00:00 40 5
8 2019-10-03 00:00:00 60 5
9 2019-10-04 00:00:00 70 5
10 2019-10-12 00:00:00 80 5
我想要达到的结果就是这样。
ID | date_created | cost(SUM) | total_usage (SUM)
1 2019-09-01 - 2019-09-05 150 | 150
2 2019-10-01 - 2019-10-12 260 | 260
这是我的查询。我已经可以得到成本的总和,但是当我把LEFT JOIN来获得使用的总和时,而不是只有2行。即时通讯获取错误的值并具有多行。
SELECT MONTHNAME(date_created), SUM(cost), SUM(usage)
FROM first_table as first_table
LEFT JOIN second_table as second_table ON first_table.project_id = second_table.project_id
GROUP BY MONTH(first_table.date_created), YEAR(first_table.date_created)
我需要帮助来获得成本和用法的总和。有没有办法做到这一点,或者我的方法是错误的。
答案 0 :(得分:0)
您应该从不考虑月份而不考虑年份。另外,SELECT
中未聚合的列应与GROUP BY
中的列匹配。大多数数据库都强制执行此操作,包括最新版本的MySQL。
您的问题的答案是仅在SELECT
中包括所需的其他列:
SELECT YEAR(date_created), MONTHNAME(date_created), SUM(cost), MIN(cost), MAX(cost)
FROM table_name
GROUP BY YEAR(date_created), MONTH(date_created), MONTHNAME(date_created);
答案 1 :(得分:0)
这应该返回您期望的结果。这是一个简单的汇总查询,其中按年份和月份对结果进行分组(如果您的数据跨越多年,则仅按月份分组会导致问题):
SELECT
CONCAT(MIN(date_created), ' - ', MAX(date_created)) date_interval,
SUM(cost) total_cost
FROM mytable
GROUP BY YEAR(date_created), MONTH(date_created)
| date_interval | total_cost |
| ----------------------- | ---------- |
| 2019-09-01 - 2019-09-05 | 150 |
| 2019-10-01 - 2019-10-12 | 270 |