从非规范化的SQL表中获取细分

时间:2015-02-26 19:04:11

标签: sql postgresql

鉴于这种非规范化表:

SUB_LOCATION, LOCATION, LOCATION_STATUS 
A_1, A, GOOD
A_2, A, GOOD
B_1, B, BAD
B_2, B, BAD
B_3, B, BAD
C_1, C, EXCELLENT
D_1, D, EXCELLENT
D_2, D, EXCELLENT
E_1, E, BAD
F_1, F, BAD

如何按位置获取每种location_status的分类数?

意味着对于location_status计数,具有相同location / location_status对的多个sub_locations应计为1,如下所示:

BAD, 3
EXCELLENT, 2
GOOD, 1

这里BAD是3,因为它出现在B,E和F位置,而EXCELLENT是2,因为它出现在C和D等中。

我找到了几种解决方法,但我希望在Postgres中以最快的方式完成此操作,可能涉及PARTITION BY。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

计算每种状态的独特位置外观。

   SELECT location_status, 
          COUNT(DISTINCT(location))
     FROM table
 GROUP BY location_status