2016-04-16 54 views
1

我已在PostgreSQL中下表tableA如何在PostgreSQL中對某一列進行分組?

+-------------+-------------------------+ 
| OperationId |   Error   | 
+-------------+-------------------------+ 
|   1 | MajorCategoryX:DetailsP | 
|   2 | MajorCategoryX:DetailsQ | 
|   3 | MajorCategoryY:DetailsR | 
+-------------+-------------------------+ 

如何組MajorErrorCategory這樣,我得到以下?

+----------------+------------+ 
| Category | ErrorCount | 
+----------------+------------+ 
| MajorCategoryX |   2 | 
| MajorCategoryY |   1 | 
+----------------+------------+ 

CategoryError分裂後的第一部分 ':'。

回答

1

假設長度之前:可以改變,你可以結合使用substringstrpos實現結果:

SELECT 
    SUBSTRING(error, 0, STRPOS(error, ':')) AS Category,  
    COUNT(*) AS ErrorCount 
FROM t 
GROUP BY SUBSTRING(error, 0, STRPOS(error, ':')) 

Sample SQL Fiddle

如果你不想重複你可以的函數調用f課程將這部分包裝在一個suquery或common table表達式中。

0

考慮substring()功能:

SELECT substring(TableName.Error,1,14) AS Category, 
     Count(*) As ErrorCount 
FROM TableName 
GROUP BY substring(TableName.Error,1,14) 
1

這就是我想出了使用子查詢和split_part功能:

SELECT *, COUNT(ErrorSplit) 
FROM (
    SELECT split_part(Error, ':', 1) AS ErrorSplit 
    FROM tableA 
) AS tableSplit 
GROUP BY ErrorSplit; 

輸出:

errorsplit | count 
---------------------- 
MajorCategoryX | 2 
MajorCategoryY | 1 

SQL Fiddle

相關問題