【发布时间】:2022-01-13 20:52:42
【问题描述】:
为了简化我正在处理的复杂查询,我觉得解决这个问题很关键。
我有下表
| id | city | Item |
|---|---|---|
| 1 | chicago | 1 |
| 2 | chicago | 2 |
| 3 | chicago | 1 |
| 4 | cedar | 2 |
| 5 | cedar | 1 |
| 6 | cedar | 2 |
| 7 | detroit | 1 |
我正在尝试查找按城市和项目分组的行数与仅按每个唯一城市-项目对的项目分组的行数的比率。
所以我想要这样的东西
| City | Item | groupCityItemCount | groupItemCount | Ratio |
|---|---|---|---|---|
| chicago | 1 | 2 | 4 | 2/4 |
| chicago | 2 | 1 | 3 | 1/3 |
| cedar | 1 | 1 | 4 | 1/4 |
| cedar | 2 | 2 | 3 | 2/3 |
| detroit | 1 | 1 | 4 | 1/4 |
这是我目前的解决方案,但太慢了。
Select city, item, (count(*) / (select count(*) from records t2 where t1.item=t2.item)) AS pen_ratio
From records t1
Group By city, item
也将 where 替换为 groupBy 并拥有,但这也很慢。
Select city, item, (count(*) / (select count(*) from records t2 group by item having t1.item=t2.item)) AS pen_ratio
From records t1
Group By city, item
(注意:我已经从解决方案中删除了 column3 和 column4 以获得更小的代码)
(编辑:xQbert 指出的错字和 马特贝利)
【问题讨论】:
-
您是否考虑过为城市和/或项目建立索引?
-
groupItemCounts 的“数学”是什么...我想我明白为什么芝加哥项目 1 的计数为 3(因为芝加哥总共有 3 条记录)但为什么会有 4 条呢?
-
dbfiddle.uk/… 是我必须玩的...
标签: sql join group-by postgresql-13