postgresql 按产品统计真实的客户总数groupby

vecaoik1  于 2023-01-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(111)

首先,我不确定这是否可能。
假设我有这样一个数据集示例

CREATE TABLE TRANSACTION(
user_id numeric,
account_id varchar,
product varchar,
colour varchar,
price numeric);
insert into transaction (user_id, account_id, product, colour, price)
values
(1, 'a1', 'biycle', 'black', 500),
(1, 'a2', 'motorbike', 'red', 1000),
(1, 'a2', 'motorbike', 'blue', 1200),
(2, 'b3', 'car', 'grey', 10000),
(2, 'b2', 'motorbike', 'black', 1250),
(3, 'c1', 'biycle', 'black', 500),
(3, 'c2', 'biycle', 'black', 525),
(3, 'c4', 'skateboard', 'white', 250),
(3, 'c5', 'scooter', 'blue', 260)

从表中我们知道
总的真实客户是3(1,2,3)
实际账户总额为8(a1、a2、b3、b2、c1、c2、c4、c5)
然后用这个代码

SELECT
    product,
    colour,
    sum(price)total_price,
    count(DISTINCT user_id)customer_total,
    count(DISTINCT account_id)account_total
 from transaction
 group by 
    product, colour

回报是这样的
| 积|颜色|总价|客户_总计|帐户_总计|
| - ------| - ------| - ------| - ------| - ------|
| 双循环|黑色|小行星1525|第二章|三个|
| 汽车|灰色|一万|1个|1个|
| 摩托车|黑色|小行星125| 1个|1个|
| 摩托车|蓝色|小行星1200| 1个|1个|
| 摩托车|红色|一千|1个|1个|
| 滑板车|蓝色|二百六十|1个|1个|
| 滑板|白色|二百五十|1个|1个|
从上面的输出,
如果我们计算customer_total的总和,则为8,
如果我们合计account_total,则为9
是否有任何替代方法可以使customer_total为3,account_total为8

tf7tbtn2

tf7tbtn21#

您可以使用内联查询计算帐户和客户合计,内联查询在同一查询中计算客户和帐户合计。

SELECT
    product,
    colour,
    sum(price)total_price,
    (select count(DISTINCT  user_id) from transaction) as customer_total,
    (select count(DISTINCT account_id) from transaction) as account_total
 from transaction
 group by 
    product, colour

结果:
| 积|颜色|总价|客户_总计|帐户_总计|
| - ------| - ------| - ------| - ------| - ------|
| 双循环|黑色|小行星1525|三个|八个|
| 汽车|灰色|一万|三个|八个|
| 摩托车|黑色|小行星125|三个|八个|
| 摩托车|蓝色|小行星1200|三个|八个|
| 摩托车|红色|一千|三个|八个|
| 滑板车|蓝色|二百六十|三个|八个|
| 滑板|白色|二百五十|三个|八个|

相关问题