我有一个带有销售表的数据库表t :
ID | 类型 | 年龄 |
---|---|---|
1 | 乙 | 20 |
1 | 英国石油公司 | 20 |
1 | 英国石油公司 | 20 |
1 | 磷 | 20 |
2 | 乙 | 30 |
2 | 英国石油公司 | 30 |
2 | 英国石油公司 | 30 |
3 | 磷 | 40 |
如果一个人购买了捆绑商品,则会出现捆绑销售 (TYPE B) 和不同的捆绑商品 (TYPE BP),它们都具有相同的 ID。因此,包含 2 个产品的捆绑包出现 3 次(1x TYPE B 和 2x TYPE BP)并且具有相同的 ID。
一个人还可以在单次销售 (TYPE P) 中购买任何其他具有相同 ID 的产品。
我需要计算客户的平均/最小/最大年龄,但每次销售的多个条目会篡改正确的计算。
实际平均年龄是
(20 + 30 + 40) / 3 = 30
并不是
(20+20+20+20 + 30+30+30 + 40) / 8 = 26,25
但我不知道如何将销售额减少到单行条目并获得 4 个需要的值?
我是否需要 GROUP BY 两次(首先按 ID,然后按 AGE?)如果是,我该怎么做?
到目前为止我的代码:
SELECT
AVERAGE(AGE)
, MIN(AGE)
, MAX(AGE)
, MEDIAN(AGE)
FROM t
但这确实计算每一行。