【发布时间】:2021-11-08 10:21:33
【问题描述】:
我对 SQL 还很陌生,我正在努力根据某些过滤器生成一个包含多个聚合的表。
我的临时权限有 3 列个人在类别 ID 和客户 ID 上是唯一的(即跨类别可以有多个相同的客户 ID)。
| Category ID | Customer ID | Number of Purchases |
|---|---|---|
| X | A | 4 |
| X | B | 10 |
| X | C | 2 |
| Y | A | 2 |
| Y | E | 6 |
| Z | A | 10 |
| Z | C | 5 |
| Z | D | 7 |
我要查找的输出表基本上是 4 列:按类别 ID 分组标识 至少有 3 次购买的客户总数、至少有 5 次购买以及该类别中所有客户的总购买次数。输出表如下所示:
| Category_ID | Total_Customers_3 | Total_Customers_5 | Total_Purchases |
|---|---|---|---|
| X | 2 | 1 | 16 |
| Y | 1 | 1 | 8 |
| Z | 3 | 3 | 22 |
当我输入以下代码时,我得到了每个类别的正确总购买量列,但每个类别至少购买 3 次的客户总数不正确,因为所有类别的汇总都是相同的。
我的代码:
SELECT table.categoryID AS Category_ID
(SELECT COUNT (table.customerID)
FROM table
WHERE table.purchases >=3) AS Total_Customers_3,
(SELECT COUNT (table.customerID)
FROM table
WHERE table.purchases >=5) AS Total_Customers_5,
SUM (table.purchases) AS Total_Purchases,
FROM table
GROUP BY Category_ID, Total_Customers_3, Total_Customers_5,
(P.S 当我尝试只使用 GROUP BY Category_ID 时,我收到一个错误,指出语法不正确,因为我的 SELECT 语句中有子查询。
不正确的表格(即所有类别中满足条件的客户总数相同)如下所示:
| Category_ID | Total_Customers_3 | Total_Customers_5 | Total_Purchases |
|---|---|---|---|
| X | 2 | 1 | 16 |
| Y | 2 | 1 | 8 |
| Z | 2 | 1 | 22 |
更新:我应该在原始问题中包含此内容,但我实际上希望根据 2 个条件在相同的客户总数中生成 2 列 - 一个用于至少 3 次购买的客户,另一列对于至少有 5 位客户的客户。
【问题讨论】:
标签: mysql sql group-by subquery aggregates