У меня есть некоторые данные о покупках. Хотелось бы увидеть: сгруппировать по merchant
, какое среднее количество различных продуктов на клиента ?
Это мой код
CREATE TABLE purchases (
id int IDENTITY,
merchant varchar(50) NOT NULL,
customer VARCHAR(50) NOT NULL,
product VARCHAR(50) NOT NULL,
amount money
);
INSERT INTO purchases (merchant, customer, product, amount)
VALUES
('apple', 'John', 'iphone', 100),
('apple', 'John', 'macbook', 100),
('apple', 'Jessi', 'iphone', 100),
('microsoft', 'John', 'surface laptop', 100),
('microsoft', 'John', 'surface book', 100),
('microsoft', 'Jessi', 'surface book', 100)
-- I can do it with two layers of group by
select merchant
, avg(cast(ct_product as float)) as avg_number_products_per_customer
from (
select merchant
, customer
, count(distinct product) as ct_product
from purchases
group by merchant, customer
) as a
group by merchant
Я могу сделать это с двумя слоями group by
, как указано выше, но в идеале мне нужен только один основной group by
, чтобы код выглядел аккуратно, а также я мог бы сложить вместе другие sum
/ avg
, например:
select merchant
, count(distinct customer) as count_customers
, avg (amount) as avg_amount
, ??? as avg_number_products_per_customer
from purchases
group by merchant