在我的sqlite命令下面,我想获取barcoeds
的计数,当它等于sessions.id
select sessions.id, sessions.session_name, sessions.session_type,sessions.date_time, count(barcodes.id) as barcode_count
from sessions left join barcodes
on sessions.id = barcodes.session_id
group by barcodes.id
order by sessions.id desc
此命令有效,但是返回的数据具有相同的值,例如,如果数据为1,则返回的数据多于3
,但实际上我只有一行
0 = {_List} size = 5
0 = 11
1 = "111"
2 = 2
3 = "1398/05/14 ساعت: 08:43"
4 = 1
1 = {_List} size = 5
0 = 11
1 = "111"
2 = 2
3 = "1398/05/14 ساعت: 08:43"
4 = 1
2 = {_List} size = 5
0 = 11
1 = "111"
2 = 2
3 = "1398/05/14 ساعت: 08:43"
4 = 1
答案 0 :(得分:1)
首先计算表id
中每个session_id
的{{1}},然后加入barcodes
:
sessions
我想select
s.id, s.session_name, s.session_type, s.date_time,
coalesce(b.barcode_count, 0) barcode_count
from sessions s left join (
select session_id, count(id) barcode_count
from barcodes
group by session_id
) b on s.id = b.session_id
order by s.id desc
在表id
中是唯一的,因此不需要barcodes
。
答案 1 :(得分:1)
我想您希望每个会话一行。因此,您的查询正在按错误的列进行汇总:
select s.id, s.session_name, s.session_type,
s.date_time, count(b.id) as barcode_count
from sessions s left join
barcodes b
on s.id = b.session_id
group by s.id
---------^ sessions not barcode
order by s.id desc;
您可能会发现,使用相关子查询也很容易做到这一点:
select s.*,
(select count(*) from barcodes b where b.session_id = s.id)
from sessions s;
在这些查询中使用表别名使它们更易于编写和阅读。