【发布时间】:2015-12-30 18:13:52
【问题描述】:
我有这个示例表:
sort_order product color productid price
---------- ------- ------ --------- -----
1 bicycle red 2573257 50
2 bicycle red 0983989 40
3 bicycle red 2093802 45
4 bicycle blue 9283409 55
5 bicycle blue 3982734 60
1 teddy bear brown 9847598 20
2 teddy bear black 3975897 25
3 teddy bear white 2983428 30
4 teddy bear brown 3984939 35
5 teddy bear brown 0923842 30
1 tricycle pink 2356235 25
2 tricycle blue 2394823 30
3 tricycle blue 9338832 35
4 tricycle pink 2383939 30
5 tricycle blue 3982982 35
我想要一个返回产品、平均价格和最常见颜色的查询。
所以我在这个例子中的查询应该会返回:
product most_frequent_color average_price
------- ------------------- -------------
bicycle red 50
teddy bear brown 28
tricycle blue 31
平均部分似乎很容易按产品分组并使用 avg(price),但是如何解决最常见的颜色部分?
这是我到目前为止自己能弄清楚的查询,但我不知道如何获得每个组的 most_frequent_color:
SELECT product, avg(price) AS average_price from products
WHERE sort_order <= 5
GROUP BY product
在我的真实世界表中,每个组的行数通常比我感兴趣的要多,所以我只使用 sort_order 字段获得有限的行数
对于在“颜色”的所有行中具有 null 或具有多个最常见颜色的稀有组,我想在返回的 most_frequent_color 列中返回 null
感谢您对此的任何帮助!
【问题讨论】:
-
如果一个项目有两种(或更多)最常见的颜色,会发生什么?您或许应该将其添加到您的示例数据中。
-
看起来像家庭作业?我会说你需要把它看作一个两阶段的问题。
-
预期结果不明确或错误。红色自行车的平均价格是 45 而不是 50。蓝色三轮车的平均价格是 38,33
-
@Alex.. 平均值是针对产品,而不是颜色。
-
@jarlh 好点。我在示例表中添加了一个字段“sort_order”。在我的真实世界表中,我确实有这个,我目前在 where 子句中使用 sort_order