MySQL中无重复计算给定数字因数个数及票务订单分组统计问题
Q2: 票务订单按售票数量分组,统计5张装、3张装及单独票数量
从你的例子和现有代码来看,核心是优先用最大包装(5张装),剩余数量再用3张装,最后剩下的就是单独票,这个逻辑可以用整数除法和取余运算直接实现,比CASE WHEN更简洁高效。
假设你的订单表是ticket_orders,包含ticket_qty(每单售票数量)字段,完整的分组统计SQL如下:
SELECT ticket_qty AS per_order_tickets, -- 5张装数量:总数量除以5取整 FLOOR(ticket_qty / 5) AS fivepack, -- 3张装数量:总数量模5后,剩余部分除以3取整 FLOOR((ticket_qty % 5) / 3) AS threepack, -- 单独票数量:总数量模5后再模3的余数 (ticket_qty % 5) % 3 AS singles, -- 可选:统计该售票数量对应的订单总数 COUNT(*) AS total_orders FROM ticket_orders GROUP BY ticket_qty ORDER BY ticket_qty;
验证一下你的例子:当ticket_qty=27时,27/5=5(5张装数量),27%5=2,2/3=0(3张装数量),2%3=2(单独票数量),完全符合你给出的结果。
再举几个测试案例:
- 数量11:
11/5=2,11%5=1,1/3=0,1%3=1→ 2份5张装,0份3张装,1张单独票 - 数量8:
8/5=1,8%5=3,3/3=1,3%3=0→1份5张装,1份3张装,0张单独票 - 数量7:
7/5=1,7%5=2,2/3=0,2%3=2→1份5张装,0份3张装,2张单独票
完全符合业务逻辑。
内容的提问来源于stack exchange,提问作者mrpatg
相关产品推荐
相关产品推荐

