【发布时间】:2017-05-26 20:25:04
【问题描述】:
我有一个名为products的表:
我执行这个 SQL 查询:
SELECT *, max(product_revenue) OVER w AS max
FROM products
WINDOW w AS (PARTITION BY product_category)
ORDER BY Id
因此,在每个 product_category 中使用新的 max 列来表示最大 product_revenue 的表格:
+---+------------+----------------+--------------- +------+ | ID|产品名称|产品类别|产品收入|最大值| +---+------------+----------------+--------------- +------+ | 1|橙色|水果| 170000|300000| | 2|苹果|水果| 300000|300000| | 3|桃子|水果| 98000|300000| | 4|香蕉|水果| 285000|300000| | 5|黄瓜|蔬菜| 451000|512000| | 6|番茄|蔬菜| 512000|512000| | 7|沙拉|蔬菜| 281000|512000| | 8|白菜|蔬菜| 85000|512000| | 9|可乐|饮料| 687000|687000| | 10|芬达|饮料| 258000|687000| | 11|精灵|饮料| 432000|687000| | 12|百事可乐|饮料| 661000|687000| +---+------------+----------------+--------------- +------+问题是我怎样才能得到对应的产品名称而不是数字? 所以我想得到这个:
+---+------------+----------------+--------------- +----------+ | ID|产品名称|产品类别|产品收入|最大 | +---+------------+----------------+--------------- +----------+ | 1|橙色|水果| 170000|苹果| | 2|苹果|水果| 300000|苹果| | 3|桃子|水果| 98000|苹果| | 4|香蕉|水果| 285000|苹果| | 5|黄瓜|蔬菜| 451000|番茄| | 6|番茄|蔬菜| 512000|番茄| | 7|沙拉|蔬菜| 281000|番茄| | 8|白菜|蔬菜| 85000|番茄| | 9|可乐|饮料| 687000|可乐| | 10|芬达|饮料| 258000|焦炭| | 11|精灵|饮料| 432000|焦炭| | 12|百事可乐|饮料| 661000|焦炭| +---+------------+----------------+--------------- +----------+【问题讨论】:
-
您的 DBMS 是否支持
FIRST_VALUE?试试FIRST_VALUE(product_name) OVER (PARTITION BY product_category ORDER BY product_revenue DESC) -
“vegetable”和“drink”不是您数据中的产品名称。
-
谢谢,@GordonLinoff!我的,错误,我已经更正了 max 列。
标签: sql aggregate partitioning