Как сделать «подсчет» по нескольким критериям одновременно - PullRequest
1 голос
/ 02 февраля 2012

Я очень новичок в SQL и использую SQLite 3 для запуска анализа корзины данных продаж.

Соответствующие столбцы - это идентификатор продукта, уникальный идентификатор транзакции (который идентифицирует корзину) и количество продукта.,Если клиент купил более одного типа продукта, повторяется уникальный идентификатор транзакции.

Я хочу подсчитать количество корзин, в которых клиент купил 1, 2, 3, 4, 5 и более 5 товаров, чтобы проанализировать, какой процент клиентов купил только 1 товар.

Код, который я использую:

select count (*) as One from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 0) where total = 1;
select count (*) as Two from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 2;
select count (*) as Three from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 3; 
select count (*) as Four from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 4; 
select count (*) as Five from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 5; 
select count (*) as Six from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total = 6; 
select count (*) as Sevenplus from (select uniqID, sum(qty) as total from otcdata3 group by uniqID having total > 1) where total > 6;

Этот код работает, но, во-первых, как вы можете видеть, он выглядит довольно громоздким, а во-вторых, при открытии я получаю данные в следующем форматеэто в Excel:

One
1353697
Two
483618
Three
166148
Four
76236
Five
35079
Six
18904
Sevenplus
27896

В идеале я хотел бы, чтобы количество элементов в верхней части списка соответствовало количеству корзин, соответствующих этим критериям.Хотя сейчас я, очевидно, могу решить проблему вручную, мне нужно в ближайшее время провести аналогичный анализ в гораздо большем масштабе!

Любые предложения о том, как написать код так, чтобы он структурировал его так, как я хочу,с благодарностью!

1 Ответ

0 голосов
/ 02 февраля 2012

Это то, что вы ищете:

select
  case
    when total=1 then 'One'
    when total=2 then 'Two'
    when total=3 then 'Three'
    when total=4 then 'Four'
    when total=5 then 'Five'
    when total=6 then 'Six'
    when total=7 then 'SevenPlus'
  end,
  count(total)
from
  (select case when count(uniqID) <= 6 then count(uniqID) else 7 end as total from otcdata3 group by uniqID) as totals
group by total
order by total

Возвращает два столбца, первый столбец - это текст, представляющий количество элементов в транзакции, а второй столбец - количество отдельных покупок.с таким количеством предметов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...