复杂SQLite连接
我有一个带有3个字段的表(tbl):id、日期和状态。表中的示例信息可能如下所示:复杂SQLite连接,sqlite,Sqlite,我有一个带有3个字段的表(tbl):id、日期和状态。表中的示例信息可能如下所示: id date status 1 8-20 open 2 8-20 open 3 8-20 closed 4 8-21 closed 5 8-22 open 6 8-23 open 7 8-24 closed date open closed 8-20 2 1 8-21 0 1 8-22 1 0 8-23 1 0 8-24 0 1 我想编写一个查询,返回如下数据:
id date status
1 8-20 open
2 8-20 open
3 8-20 closed
4 8-21 closed
5 8-22 open
6 8-23 open
7 8-24 closed
date open closed
8-20 2 1
8-21 0 1
8-22 1 0
8-23 1 0
8-24 0 1
我想编写一个查询,返回如下数据:
id date status
1 8-20 open
2 8-20 open
3 8-20 closed
4 8-21 closed
5 8-22 open
6 8-23 open
7 8-24 closed
date open closed
8-20 2 1
8-21 0 1
8-22 1 0
8-23 1 0
8-24 0 1
我能得到的最接近的结果是将两个联合选择包装在另一个选择中,如下所示:
select date from (
select date, count(id) from tbl where status = 'open' group by date
union
select date, count(id) from tbl where status = 'closed' group by date)
group by date
如果不是SQLite来解释其中一个状态有0个条目的日期,我认为这将涉及一个完整的外部联接,但我不知道如何构造两个左联接以获得所需的结果。运行以下查询:
select date, sum(case when status ='open' then 1 else 0 end) as open from test group by date
并对closed执行相同操作。您可以使用相关子查询:
SELECT date,
(SELECT COUNT(*)
FROM tbl AS t2
WHERE t2.date = tbl.date
AND status = 'open'
) AS open,
(SELECT COUNT(*)
FROM tbl AS t2
WHERE t2.date = tbl.date
AND status = 'closed'
) AS closed
FROM tbl
或者,按日期分组,并计算组中有多少行具有所需状态:
SELECT date,
total(status = 'open') AS open,
total(status = 'closed') AS closed
FROM tbl
GROUP BY date
第二个查询正确地提取了数据。谢谢