Рекомендации по SQL-запросам для создания таблицы процентных показателей покупателей с 1 разом по сравнению с частыми покупателями - PullRequest
1 голос
/ 11 октября 2019

У меня есть таблица с именем client, которая выглядит следующим образом:

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

Например, это означает, что Клиент А покупал в нашем магазине 3 раза [первый раз за 123 $, второй за 389 $,третий за 34 $]. Та же логика для других клиентов ...

Я пытаюсь получить таблицу процентов, чтобы получить клиента, который купил только 1 раз, и того, кто купил более 1 раза. Результат должен быть

Category    Percentage
=======================
1timebuyer  0.3333
2timeOrMore 0.66666 

Действительно, клиент A купил 3 раза, а клиент B 2 раза, поэтому есть 2 из 3 клиентов, которые относятся к категории 2timeOrMore. Следовательно, 2timeOrMore представляет 0,6666 [2/3] покупателей, а 1timebuyer 0,3333 [1/3]

Какой самый оптимальный способ сделать это в mysql только в 1 запросе SQL ?

1 Ответ

1 голос
/ 11 октября 2019

Я думаю, вам нужно два уровня агрегации. Внутренний:

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;
...