【发布时间】:2022-06-20 04:52:52
【问题描述】:
我在一个表中有关于地点和购买的信息,我需要找到所有地点的名称,对于在该地点购买的所有客户,他们的购买总额至少为 70%。
我已经在 python 上找到了答案,我总结了每个客户的购买次数,然后是每个客户和地点的购买次数,并创建了一个包含百分比的新列。
所以我得到了这样的东西:
| client_id | place_name | total purchase | detail purchase | percent |
|---|---|---|---|---|
| 1 | place1 | 10 | 7 | 0.7 |
| 1 | place2 | 10 | 3 | 0.3 |
| 2 | place1 | 5 | 4 | 0.8 |
| 2 | place3 | 5 | 1 | 0.2 |
所以,我的答案应该是 place1,因为在那个地方所有购买的所有百分比都是
= 70%。
我已经开发了这个python代码来解决它:
places = []
for i in place name:
if (c[c["place_name"]==i]["percent"]>=0.7).all():
places.append(i)
但现在我需要在 SQl 中执行此操作,但我不确定是否有办法在 SQL 中使用所有函数获得类似的行为 我一直在尝试这个:
SELECT place_name
FROM c
GROUP BY place_name
HAVING total_purchase/detail_purchase >=0.7
但是,它不起作用 :c 有什么帮助吗?
【问题讨论】:
-
改变分子和分母的顺序,并添加聚合使得
SUM(detail_purchase/total_purchase )>=.7在添加client_id到GROUP BY列表之后。
标签: sql postgresql