SQL-统计列中不同值的出现次数
长话短说: 我有这样的桌子SQL-统计列中不同值的出现次数,sql,postgresql,Sql,Postgresql,长话短说: 我有这样的桌子 nr sat col 1 1 dsag 1 2 gds 1 2 gds 2 1 gdsa 2 2 gf 2 3 gdsa 并期待这样的结果: nr Sat_1 Sat_2 Sat_3 1 1 2 0 2 1 1 1 我希望“选择不同的sat”中的每一行都有一个新列,下一个group by nr这可以使用条件聚
nr sat col
1 1 dsag
1 2 gds
1 2 gds
2 1 gdsa
2 2 gf
2 3 gdsa
并期待这样的结果:
nr Sat_1 Sat_2 Sat_3
1 1 2 0
2 1 1 1
我希望“选择不同的sat”中的每一行都有一个新列,下一个group by nr这可以使用条件聚合来完成:
select nr,
count(*) filter (where sat = 1) as sat_1,
count(*) filter (where sat = 2) as sat_2,
count(*) filter (where sat = 3) as sat_3
from the_table
group by nr
order by nr;
在线示例:这可以使用条件聚合来完成:
select nr,
count(*) filter (where sat = 1) as sat_1,
count(*) filter (where sat = 2) as sat_2,
count(*) filter (where sat = 3) as sat_3
from the_table
group by nr
order by nr;
在线示例:我喜欢回答没有名字的马。这是较短的,但可能会稍微慢一些:
select nr,
sum((sat = 1)::int) as sat_1,
sum((sat = 2)::int) as sat_2,
sum((sat = 3)::int) as sat_3
from the_table
group by nr
order by nr;
编写查询的更典型的方法是使用case
:
select nr,
sum(case when sat = 1 then 1 else 0 end) as sat_1,
. . .
这恰好是在许多数据库中运行的标准SQL。我喜欢有“没有”名字的“马”。这是较短的,但可能会稍微慢一些:
select nr,
sum((sat = 1)::int) as sat_1,
sum((sat = 2)::int) as sat_2,
sum((sat = 3)::int) as sat_3
from the_table
group by nr
order by nr;
编写查询的更典型的方法是使用case
:
select nr,
sum(case when sat = 1 then 1 else 0 end) as sat_1,
. . .
这恰好是将在许多数据库中运行的标准SQL。“长话短说”-您需要使用
计数(不同列)
和按nr分组,sat
来获得数字,使用透视
来获得所需的显示。要使这篇短篇故事更长,请展示您已经尝试过的内容。“长篇故事短篇”-您需要使用计数(不同列)
和按nr分组,sat
来获取数字,使用轴来获取所需显示。要使这个短篇故事更长,请展示您已经尝试过的内容。是的,我知道,但我不想手动执行,因为sat列中的值比本例中的值多得多。如果它能为每一个不同的数据自动创建“计数线”,那就太完美了value@dekarz当前位置你应该在问题中提到这一点。但总的来说,这是不可能的。在执行查询之前,数据库必须知道查询的列数。我明白了。无论如何,谢谢你,这似乎是最好的答案!:)但是我很失望,我不能像我想象的那样去做。据我所知,filter
是可选的“高级OLAP操作”的一部分。它符合标准吗?@GordonLinoff HSQLDB还支持过滤器,我知道,但我不想手动执行,因为sat列中的值比本例中的值多得多。如果它能为每一个不同的数据自动创建“计数线”,那就太完美了value@dekarz当前位置你应该在问题中提到这一点。但总的来说,这是不可能的。在执行查询之前,数据库必须知道查询的列数。我明白了。无论如何,谢谢你,这似乎是最好的答案!:)但是我很失望,我不能像我想象的那样去做。据我所知,filter
是可选的“高级OLAP操作”的一部分。它符合标准吗?@GordonLinoff HSQLDB还支持filter
子句filter()
子句也是标准SQL;)@没有名字的马有没有标准sql特性的图表?哪些rdbms支持它?e、 g.就像你能找到的emca5/6和浏览器?我想不是真的,因为SQL标准不是免费的。我所知道的唯一一个类似的比较是:但这还远远不够,也不限于SQL标准中的功能。@a_horse_,带有_no_名称,谢谢链接!filter()
子句也是标准SQL;)@没有名字的马有没有标准sql特性的图表?哪些rdbms支持它?e、 g.就像你能找到的emca5/6和浏览器?我想不是真的,因为SQL标准不是免费的。我所知道的唯一一个类似的比较是:但这还远远不够,也不限于SQL标准中的功能。@a_horse_,带有_no_名称,谢谢链接!