我在表格中有關于地點和購買的資訊,我需要找到所有地點的名稱,對于在該地點購買的所有客戶,他們的購買總額至少為 70%。
我已經在 python 上找到了答案,我總結了每個客戶的購買次數,然后是每個客戶和地點的購買次數,并且我創建了一個帶有百分比的新列。
所以我得到了這樣的東西:
| client_id | 地名 | 總采購 | 詳細購買 | 百分 |
|---|---|---|---|---|
| 1 | 地點1 | 10 | 7 | 0.7 |
| 1 | 地點2 | 10 | 3 | 0.3 |
| 2 | 地點1 | 5 | 4 | 0.8 |
| 2 | 地點3 | 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 有什么幫助嗎?
uj5u.com熱心網友回復:
模式和插入陳述句:
create table c(client_id int, place_name varchar(50), total_purchase int, detail_purchase int);
insert into c values(1 ,'place1', 10, 7);
insert into c values(1 ,'place2', 10, 3);
insert into c values(2 ,'place1', 5, 4);
insert into c values(2 ,'place3', 5, 1);
詢問:
with cte as
(
select client_id,place_name,total_purchase,detail_purchase,detail_purchase*1.0/total_purchase percent,
count( client_id)over (partition by place_name) total_client
from c a
)
select place_name
from cte where percent>=0.7
group by place_name
having count(client_id)=max(total_client)
輸出:
| 地名 |
|---|
| 地點1 |
db<>在這里擺弄
uj5u.com熱心網友回復:
如果我正確理解您的問題,您可以使用 where 陳述句
SELECT place_name
FROM purchases
where (detail_purchase/total_purchase) >=0.7
GROUP BY place_name
分貝小提琴
uj5u.com熱心網友回復:
這是一個基于group by和min函式的干凈解決方案
select place_name
from c
group by place_name
having min(percent)>=0.7
| 地名 |
|---|
| 地點1 |
小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486153.html
標籤:sql PostgreSQL
