鉴于这种非规范化表:
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。有什么想法吗?
答案 0 :(得分:1)
计算每种状态的独特位置外观。
SELECT location_status,
COUNT(DISTINCT(location))
FROM table
GROUP BY location_status