我想生成汇总表来显示我拥有数据库的每个模型的计数(不同的pid):
model corner pid
aa c1 1
aa c1 1
aa c1 2
aa c2 3
aa c3 4
bb c1 1
bb c1 1
bb c2 2
bb c2 3
bb c2 3
bb c3 4
结果是这样的:
corner aa bb
c1 2 1
c2 1 2
c3 1 1
我可以知道我应该使用什么查询命令吗?
你可以先得到你想要的数量:
select corner, model, count(distinct pid) as n from t group by corner, model
这给你这个:
corner|model|n
c1 |aa |2
c1 |bb |1
c2 |aa |1
c2 |bb |2
c3 |aa |1
c3 |bb |1
然后通过corner
对派生表进行分组,并根据n
值对model
s求和:
select
corner,
sum(case when model = 'aa' then n else 0 end) as aa,
sum(case when model = 'bb' then n else 0 end) as bb
from (
select corner, model, count(distinct pid) as n
from t
group by corner, model
) dt
group by corner
SQLite将布尔值表示为1和0(分别为true和false),因此您可以将其写为:
select
corner,
sum(n * (model = 'aa')) as aa,
sum(n * (model = 'bb')) as bb
from (
select corner, model, count(distinct pid) as n
from t
group by corner, model
) dt
group by corner
但我发现便携式case
版本一目了然更容易理解。
两个版本都会产生如下结果:
corner|aa|bb
c1 |2 |1
c2 |1 |2
c3 |1 |1
如果你想让结果由corner
排序,那么你应该在查询中包含一个明确的order by corner
:
select
corner,
sum(case when model = 'aa' then n else 0 end) as aa,
sum(case when model = 'bb' then n else 0 end) as bb
from (
select corner, model, count(distinct pid) as n
from t
group by corner, model
) dt
group by corner
order by corner