0

我有一个类似于下面的表格:

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

我怎样才能做到这一点?(顺便说一句,这只是一个学术观点的问题)提前谢谢!

4

3 回答 3

1

Postgres 提供了 函数split_part(),它可以通过分隔符来分割字符串。您想要第二部分(逗号后的部分):

select split_part(direction, ', ', 2) as state, count(*)
from t
group by split_part(direction, ', ', 2);
于 2013-08-24T22:26:45.150 回答
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。

于 2013-08-24T22:17:52.820 回答
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

sql fiddle demo

如果您以这种方式编写查询,将来很容易更改分组字段。

希望有所帮助,并记住 - 可读性很重要!:)

于 2013-08-25T05:37:16.403 回答