我在数据库中使用了两个表。 第一个包含与成功和失败付款相关的数据,而第二个表包含有关服务状态的数据。Mysql内部联接查询
查询的结果应该将两个表结合起来,结果列出按日期分组的成功和失败付款以及按天分组的服务状态。
第一个表的样子:
id | charged | date
-----------------------------
8 | OK | 2011-12-03
7 | OK | 2011-12-03
9 | NO | 2011-12-03
11 | OK | 2011-12-04
14 | NO | 2011-12-04
第二个表是这样的:
id | status | date
--------------------------
8 | 1 | 2011-12-03
9 | 1 | 2011-12-03
11 | 0 | 2011-12-04
12 | 0 | 2011-12-04
14 | 1 | 2011-12-04
正确的查询结果应该是:
date | not_charged | charged | status_1 | status_0
-----------------------------------------------------------
2011-12-04 | 1 | 1 | 1 | 2
2011-12-03 | 1 | 2 | 2 | 0
,我试过查询看起来像这样:
SELECT i.date, SUM(
CASE WHEN i.charged = 'NO'
THEN 1 ELSE 0 END) AS not_charged, SUM(
CASE WHEN i.charged = 'OK'
THEN 1 ELSE 0 END) AS charged, SUM(
CASE WHEN s.status = '1'
THEN 1 ELSE 0 END) AS status_1, SUM(
CASE WHEN s.status = '0' THEN 1 ELSE 0 END) AS status_0
FROM charge i INNER JOIN status s ON s.date = i.date
GROUP BY i.date
,但我得到错误的结果看起来像这样
date | not_charged | charged | status_1 | status_0
---------------------------------------------------------
2011-12-04 | 3 | 3 | 2 | 4
2011-12-03 | 2 | 4 | 6 | 0
我在做什么错了,我怎样才能得到正确的结果?
感谢您的所有建议。
+1:如果记录不需要与他们的ID相关,最简洁的选项。 – MatBailie 2011-12-20 17:38:14