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

已分组场景下的SQL二次分组:按售票量统计节日规模数量

按售票量统计节日规模数量的SQL解决方案

原SQL存在的问题

  • CASE语法错误:多个独立CASE语句不符合SQL规范,需合并为单个CASE结构,每个条件用WHEN...THEN定义返回值,最后用END收尾。
  • 缺少节日分组:未先按单个节日聚合售票量,直接全局统计无法得到每个节日的售票数,无法进行规模分类。
  • 数据类型错误:数字比较使用了字符串引号('0'、'250'),会导致字符串逻辑比较,而非数值比较。
  • 关联逻辑模糊:原查询中ticket与purchase的关联条件ticket.type = purchase.type可能无法准确关联售票记录,需根据实际表结构调整。

正确SQL示例

假设存在festival(节日表)、ticket(票务表)、purchase(购票记录表),表间关联为festival.id = ticket.festival_id、ticket.id = purchase.ticket_id,以下是实现逻辑:

SELECT 
    COUNT(*) AS Total_Festivals,
    CASE
        WHEN total_tickets BETWEEN 0 AND 250 THEN 'Small Festival'
        WHEN total_tickets BETWEEN 251 AND 500 THEN 'Medium Festival'
        WHEN total_tickets BETWEEN 501 AND 750 THEN 'Large Festival'
        WHEN total_tickets > 750 THEN 'XL Festival'
    END AS Festival_Size
FROM (
    -- 子查询:计算每个节日的总售票数
    SELECT 
        festival.id,
        COUNT(purchase.id) AS total_tickets
    FROM festival
    JOIN ticket ON festival.id = ticket.festival_id
    JOIN purchase ON ticket.id = purchase.ticket_id
    GROUP BY festival.id
) AS festival_ticket_counts
GROUP BY Festival_Size
-- 按规模顺序排序,保证结果顺序符合预期
ORDER BY 
    CASE Festival_Size
        WHEN 'Small Festival' THEN 1
        WHEN 'Medium Festival' THEN 2
        WHEN 'Large Festival' THEN 3
        WHEN 'XL Festival' THEN 4
    END;

补充:统计未售票的节日

如果需要包含售票量为0的节日(无任何购票记录的节日),将JOIN替换为LEFT JOIN即可:

SELECT 
    COUNT(*) AS Total_Festivals,
    CASE
        WHEN total_tickets BETWEEN 0 AND 250 THEN 'Small Festival'
        WHEN total_tickets BETWEEN 251 AND 500 THEN 'Medium Festival'
        WHEN total_tickets BETWEEN 501 AND 750 THEN 'Large Festival'
        WHEN total_tickets > 750 THEN 'XL Festival'
    END AS Festival_Size
FROM (
    SELECT 
        festival.id,
        COUNT(purchase.id) AS total_tickets
    FROM festival
    LEFT JOIN ticket ON festival.id = ticket.festival_id
    LEFT JOIN purchase ON ticket.id = purchase.ticket_id
    GROUP BY festival.id
) AS festival_ticket_counts
GROUP BY Festival_Size
ORDER BY 
    CASE Festival_Size
        WHEN 'Small Festival' THEN 1
        WHEN 'Medium Festival' THEN 2
        WHEN 'Large Festival' THEN 3
        WHEN 'XL Festival' THEN 4
    END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:21:14