Postgresql

列出併計算列中的單詞

  • April 8, 2022

我有一列包含物種列表的字元串:

+----------------------------------------+
|                species                 |
+----------------------------------------+
| Dinosauria, Ornitischia, indeterminado |
| Sirenia                                |
| Dinosauria, Therophoda                 |
| Dinosauria, Therophoda, Allosaurus     |
| and so on...                           |
+----------------------------------------+

我正在尋找一種在 PostgreSQL 12 中列出和計算所有唯一名稱的方法,例如:

+---------------+-------+
|    species    | count |    
+---------------+-------+
| Dinossauria   | 3     |
| Ornitischia   | 1     |
| indeterminado | 1     |                        
| Sirenia       | 1     |    
| Theropoda     | 2     |              
| Allosaurus    | 1     |                 
+-----------------------+

您可以使用該值將逗號分隔列表拆分為行regexp_split_to_table() 並按該值分組:

select s.species, count(*)
from the_table t
 cross join regexp_split_to_table(t.species, '\s*,\s*') as s(species)
group by s.species 

我使用正則表達式作為分隔符來消除逗號後的空格。以上也可以使用,unnest(string_to_array(t.species, ','))但是您需要使用trim()這些值來消除空格。

線上範例

引用自:https://dba.stackexchange.com/questions/310698