【发布时间】:2017-12-11 21:16:06
【问题描述】:
这是一组 3 个表:
订单 (ORDER_ID, CUSTOMER_ID, ORDER_DATE)
订单详情 (ORDER_ID, PRODUCT_ID, PRICE, UNITS)
客户 (CUSTOMER_ID, SIGNUP_DATE, COUNTRY)
我需要按收入确定每个国家/地区的前 3 个月。 这是我想到的查询:
SELECT c.country
, MONTH(o.order_date) as _Month
, SUM(od.price * od.units) AS revenue
, RANK() OVER (PARTITION BY country, _Month ORDER BY revenue) AS Rank
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.customer_id
JOIN order_detail od
WHERE o.order_id = od.order_id GROUP BY country, Month
HAVING Rank <= 3
此查询是否有效,因为我不确定 SUM(od.price * od.units) as revenue 是否可以在 RANK() OVER 函数中使用,因为它是一个聚合函数?
【问题讨论】:
-
您使用的是什么数据库?只有 MySQL 8.0 支持窗口函数。
-
@GordonLinoff 不幸的是我没有数据库设置,但我正在练习 MySQL。
-
您是按每个国家/地区前 3 个月的收入排序,还是按每个国家/地区前 3 个月的收入排序?
-
@Shawn 我按每个国家/地区前 3 个月的收入排序
-
您有正在使用的示例数据吗?
标签: mysql sql window-functions