SQL查询最佳实践,以生成1个时间购买者对频繁购买者的百分比表

问题描述 投票:0回答:1

我有一个名为client的表,如下:

Client Price
============
A      123
A      389
A      34
B      4
B      5
C      33

[例如,这意味着客户A在我们的商店中购买了3次[第一次以123 $的价格购买了第二笔价格为389 $,第三次以34 $的价格购买了]。其他客户的逻辑相同...

我尝试获取百分比表,以获取仅购买1次的客户和购买1次以上的客户。结果应该是

xxxx [文字]

在mysql中最理想的方法是什么?

mysql sql percentage
1个回答
0
投票

我认为您需要两个级别的聚合。内在的是:

select client, count(*) as cnt
from clients c
group by client;

然后我将像这样枢转所有计数:

select cnt, count(*), min(client), max(client)
from (select client, count(*) as cnt
      from clients c
      group by client
     ) c
group by cnt
order by cnt;

但是您想要更简单的东西:

select (case when cnt = 1 then '1' else '>1' end) as grp,
       count(*) as num_clients,
       count(*) / sum(count(*)) over () as ratio
from (select client, count(*) as cnt
      from clients c
      group by client
     ) c
group by grp;
order by cnt;
© www.soinside.com 2019 - 2024. All rights reserved.