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

Left Join按右表字段Group By报错,需显示餐厅名称的SQL求助

问题解决方案

报错原因

这个报错源于SQL的分组规则:非聚合函数的列必须出现在GROUP BY子句中。你的语句里引用了A.restaurant_id,但既没将其加入GROUP BY,也没放在SUM/COUNT这类聚合函数里,因此数据库抛出了该错误。

解决思路

  • 先通过restaurant_id关联表A(订单明细)和表B(餐厅基础信息),获取餐厅名称
  • 以餐厅名称作为分组依据(替代餐厅ID,满足显示需求)
  • 利用条件聚合实现"行展示餐厅、列展示各月营收"的交叉表效果

示例SQL

SELECT
    B.restaurants_name AS 餐厅名称,
    SUM(CASE WHEN EXTRACT(MONTH FROM A.date) = 1 THEN A."order value (usd)" ELSE 0 END) AS 1月营收,
    SUM(CASE WHEN EXTRACT(MONTH FROM A.date) = 2 THEN A."order value (usd)" ELSE 0 END) AS 2月营收,
    SUM(CASE WHEN EXTRACT(MONTH FROM A.date) = 3 THEN A."order value (usd)" ELSE 0 END) AS 3月营收,
    -- 可根据需求继续添加其他月份的CASE语句
    SUM(A."order value (usd)") AS 总营收
FROM
    "Table A" A
JOIN
    "Table B" B ON A."Restaurants id" = B."Restaurants id"
GROUP BY
    B.restaurants_name -- 按餐厅名称分组,符合SQL分组规则
ORDER BY
    B.restaurants_name;

补充说明

  • 若需统计无订单记录的餐厅,可将JOIN替换为LEFT JOIN
  • 提取月份的语法因数据库而异:MySQL用MONTH(A.date),SQL Server用DATEPART(MONTH, A.date),可根据实际使用的数据库调整
  • 若存在重名餐厅,需同时将B."Restaurants id"加入GROUP BY子句,避免数据聚合错误

内容的提问来源于stack exchange,提问作者Bahadır Ayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:42:38