You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SurrealDB的子查询中使用别名?解决daily_sales分组查询问题

SurrealDB 按月份分组获取最佳销售额及对应日期的解决方案

针对daily_sales表按month_year分组展示best_sales和best_day的需求,这里提供两种实用的查询写法,解决你遇到的日期关联及子查询别名问题:

方法一:WITH子句预计算月度最大值再关联

先通过WITH子句算出每个月的最高销售额,再关联原表匹配对应日期:

WITH monthly_max AS (
  SELECT
    date::format(<datetime>sale_date, '%Y-%m') AS month_year,
    MAX(sales_amount) AS best_sales
  FROM daily_sales
  GROUP BY month_year
)
SELECT
  mm.month_year,
  mm.best_sales,
  ds.sale_date AS best_day
FROM monthly_max mm
JOIN daily_sales ds 
  ON date::format(<datetime>ds.sale_date, '%Y-%m') = mm.month_year 
  AND ds.sales_amount = mm.best_sales;

如果同一月份存在多天销售额等于最大值,该查询会返回所有对应日期;若需仅保留一条,可在SELECT后加DISTINCT或对sale_date用MIN()/MAX()聚合。

方法二:窗口函数直接标记最优记录

利用窗口函数在分组内排序后提取目标值,无需额外关联:

SELECT DISTINCT
  date::format(<datetime>sale_date, '%Y-%m') AS month_year,
  FIRST_VALUE(sales_amount) OVER (
    PARTITION BY date::format(<datetime>sale_date, '%Y-%m') 
    ORDER BY sales_amount DESC, sale_date ASC
  ) AS best_sales,
  FIRST_VALUE(sale_date) OVER (
    PARTITION BY date::format(<datetime>sale_date, '%Y-%m') 
    ORDER BY sales_amount DESC, sale_date ASC
  ) AS best_day
FROM daily_sales;

这里通过PARTITION BY按月份分组,ORDER BY先按销售额降序排序,再按日期升序确保同月多极值时取最早日期;FIRST_VALUE提取分组内第一条数据的值,最后用DISTINCT去重得到每个月唯一的结果。

这两种写法都避开了SELECT子句内嵌套子查询无法保留主查询别名的问题,直接通过WITH或窗口函数实现需求。

内容的提问来源于stack exchange,提问作者Jesse Benjamin Slomowitz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:35:24