2016-10-04 53 views
1

試圖解決的問題發現,統計與選擇唯一的字符串列字符串,但它不是我所需要的...如何通過其他列

select distinct column1, count(column2) from table group by column1; 


    column1  column2 
    aaa   type1 
    bbb   type3 
    ccc   type1 
    aaa   type1 
    aaa   type2 
    aaa   type1 
    ccc   type3 
    aaa   type1 
    bbb   type3 
    aaa   type3 
    aaa   type3 

預期的結果是:

 
    aaa type1 = 4, type2 = 1, type3 = 2 
    bbb type3 = 2 
    ccc type1 = 1, type3 = 2 
+0

然後用COLUMN_2進行分組 – Pirate

回答

0

從您的預期產出來看,這是我認爲您的未來。

使用嵌套CASE語句的COUNT函數。

SELECT column1, 
COUNT(CASE column2 WHEN 'type1' THEN 1 ELSE NULL END) AS Type1Count, 
COUNT(CASE column2 WHEN 'type2' THEN 1 ELSE NULL END) AS Type2Count, 
COUNT(CASE column2 WHEN 'type3' THEN 1 ELSE NULL END) AS Type3Count 
FROM Yourtable 
GROUP BY column1 

輸出:

Column1 Type1Count Type2Count Type3Count 
aaa  4   1   2 
bbb  0   0   2 
ccc  1   0   1 

或者使其完全按照你想要它(不推薦):

SELECT column1, 
'type1 = ' || COUNT(CASE column2 WHEN 'type1' THEN 1 ELSE NULL END) AS Type1Count, 
'type2 = ' || COUNT(CASE column2 WHEN 'type2' THEN 1 ELSE NULL END) AS Type2Count, 
'type3 = ' || COUNT(CASE column2 WHEN 'type3' THEN 1 ELSE NULL END) AS Type3Count 
FROM Yourtable 
GROUP BY column1 

輸出:

Column1 Type1Count Type2Count Type3Count 
aaa  type1 = 4 type2 = 1 type3 = 2 
bbb  type1 = 0 type2 = 0 type3 = 2 
ccc  type1 = 1 type2 = 0 type3 = 1 
+0

感謝了很多,但在表中的數據是動態的,如果我不從一開始知道COLUMN2值?我不能寫'WHERE'type1' – Mikhail

+0

你可以使用'SQL數據透視'功能。 – Matt

+0

@a_horse_with_no_name正確注意並修正:) – Matt

2
select 
    column1, 
    string_agg(format('%s = %s', column2, count), ', ') counts 
from (
    select *, count(column2) 
    from test 
    group by 1, 2 
    order by 1, 2 
    ) s 
group by 1 
order by 1 

column1 |    counts    
---------+--------------------------------- 
aaa  | type1 = 4, type2 = 1, type3 = 2 
bbb  | type3 = 2 
ccc  | type1 = 1, type3 = 1 
(3 rows) 
+0

非常感謝 – Mikhail

0
SELECT column0, column1, 
COUNT(CASE column2 WHEN 'type1' THEN 1 ELSE NULL END) AS Type1Count, 
COUNT(CASE column2 WHEN 'type2' THEN 1 ELSE NULL END) AS Type2Count, 
COUNT(CASE column2 WHEN 'type3' THEN 1 ELSE NULL END) AS Type3Count 
FROM Yourtable 
GROUP BY column1 

無法正常工作,如果我想使用其他人column0