我有一张类似下面的表格:
id | name | direction |
--------------------------------------
1 Jhon Washington, DC
2 Diego Miami, Florida
3 Michael Orlando, Florida
4 Jenny Olympia, washington
5 Joe Austin, Texas
6 Barack Denver, Colorado
我想知道有多少人生活在特定的州:
Washington 2
Florida 2
Texas 1
Colorado 1
我该怎么做? (顺便说一下,这只是一个学术观点的问题) 提前谢谢!
答案 0 :(得分:1)
Postgres提供函数split_part()
,它将通过分隔符分解字符串。你想要第二部分(逗号后面的部分):
select split_part(direction, ', ', 2) as state, count(*)
from t
group by split_part(direction, ', ', 2);
答案 1 :(得分:0)
最初我会从方向字段获取状态。一旦你拥有了它,它就很简单了:
SELECT state, count(*) as total FROM initial_table group by state.
要获得状态,一些依赖于dbms的函数是有用的。这取决于语言。
查询的可能伪代码(给定像MySQL的substring_index这样的函数)将是:
SELECT substring_index(direction,',',-1) as state, count(*) as total
FROM initial_table group by substring_index(direction,',',-1)
编辑:如上所述,查询应该为华盛顿州返回1.
答案 2 :(得分:0)
我做这样的查询的方法是两步 - 首先,准备你需要的字段,第二,分组或其他计算。这样你就可以遵循DRY原则并且不会重复自己。我认为CTE是最好的工具:
with cte as (
-- we don't need other fields, only state
select
split_part(direction, ', ', 2) as state
from table1
)
select state, count(*)
from cte
group by state
如果您以这种方式编写查询,将来很容易更改分组字段。
希望有帮助,并记住 - 可读性很重要! :)