【问题标题】:Get all the names were total purchases are >70% of all the purchases per client获取所有名称,总购买量占每位客户所有购买量的 70% 以上
【发布时间】: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


【解决方案1】:

这是一个基于 group bymin 函数的干净解决方案

select place_name
from c
group by place_name
having min(percent)>=0.7
place_name
place1

Fiddle

【讨论】:

  • 我认为这不起作用,因为如果一个人有 0.9 而另一个人有 0.6,则平均值为 0.75,但我需要每个人都 >=0.7。对不起,如果我没有在问题上说清楚
  • 我将其更改为 min 功能,因此每个地方的每个人都需要至少计入 70% 才能显示该位置。
【解决方案2】:

架构和插入语句:

 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)

输出:

place_name
place1

db小提琴here

【讨论】:

  • 不需要 CTE 和 Windows 功能。对此有更清洁的解决方案
【解决方案3】:

如果我正确理解您的问题,您可以使用 where 语句

SELECT place_name
FROM purchases
where (detail_purchase/total_purchase) >=0.7
GROUP BY place_name

db fiddle

【讨论】:

  • 我认为这将删除百分比低于 0.7 的地方的值,但我需要的是“检查这些地方的每笔购买是否有至少 0.7 的百分比”
猜你喜欢
  • 2021-12-05
  • 2020-07-30
  • 2021-03-17
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多