列爲了使長話短說:SQL - 計數不同值的出現次數在
我有臺這樣的
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
我想從各行的新列「SELECT DISTINCT坐」和下一組由NR
列爲了使長話短說:SQL - 計數不同值的出現次數在
我有臺這樣的
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
我想從各行的新列「SELECT DISTINCT坐」和下一組由NR
我喜歡a_horse_with_no_name的答案。這是較短的,儘管它可能會稍慢一些:
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將在許多數據庫上運行。
的'濾波器()'子句是標準的SQL以及;) –
@a_horse_with_no_name有一些地方用的標準SQL特性的圖表和RDBMS支持呢?例如像你可以找到emca5/6和瀏覽器? https://kangax.github.io/compat-table/es6/ – SqlZim
不是真的,我猜是因爲SQL標準是不是免費的。我所知道的唯一一個遠程類似的比較是:http://www.sql-workbench.net/dbms_comparison.html但這遠遠不夠完整,也不僅限於SQL標準中的功能。 –
這可以通過使用COND完成itional聚集:
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;
「長話短說」 - 你需要使用'COUNT(DISTINCT列)'和'GROUP BY NR,sat'得到的數字,和'PIVOT'得到您想要的顯示。爲了使這個短篇故事更長,請顯示你已經嘗試過。 – Siyual