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

SQL对比相邻行单元格 统计各国酒店预订晚数排序报错求解

错误原因

  • 语法逻辑错误:CASE 表达式仅能返回排序用的对比值,不能在内部直接指定 DESC/ASC 排序规则
  • 函数误用:LEAD() 是窗口函数,不能直接在 ORDER BY 的条件中这么使用,且你的排序需求完全不需要用到窗口函数
  • 关联逻辑问题:当前用 INNER JOIN 会过滤掉没有任何预订记录的国家,不符合「列出所有可用国家」的需求
  • 规范问题:GROUP BY C.name 可能触发 MySQL 的 ONLY_FULL_GROUP_BY 错误,更稳妥的做法是按国家表主键 C.id 分组

正确实现

你的排序需求是「总晚数降序,晚数相同按国家名升序」,直接在 ORDER BY 后按顺序写两个排序规则即可,不需要复杂的 CASE 逻辑。

版本1:包含0预订晚数的所有国家(符合「列出所有可用国家」要求)

SELECT 
    C.name AS country, 
    COALESCE(SUM(R.nights), 0) AS nights 
FROM Test.Countries AS C
LEFT JOIN Test.Hotels AS H ON C.id = H.country_ids
LEFT JOIN Test.Reservations AS R ON H.id = R.hotel_ids
GROUP BY C.id, C.name
ORDER BY nights DESC, C.name ASC;

版本2:仅显示有预订记录的国家

SELECT 
    C.name AS country, 
    SUM(R.nights) AS nights 
FROM Test.Reservations AS R
INNER JOIN Test.Hotels AS H ON R.hotel_ids = H.id
INNER JOIN Test.Countries AS C ON C.id = H.country_ids
GROUP BY C.id, C.name
ORDER BY nights DESC, C.name ASC;

内容的提问来源于stack exchange,提问作者schedulingqs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:51:01