日期区间商品销售记录查询:MySQL语句及输出格式需求
修正后的SQL查询方案
原SQL的问题点
- 日期条件逻辑错误:两个
>导致筛选的是大于2022-11-29的记录,并非你需要的2022-11-21至2022-11-29区间 - 字段选择不规范:
SELECT tbl_product.*配合GROUP BY product_id在MySQL严格模式下会报错,非聚合字段必须出现在GROUP BY子句中 - 日期函数使用冗余:如果
date字段是datetime类型,直接用字段和日期字符串比较可利用索引,比套date()函数更高效
修正后的SQL语句
SELECT product_id, product_name, category, -- 替换为你实际需要展示的商品字段 COUNT(*) AS total FROM tbl_product WHERE date BETWEEN '2022-11-21' AND '2022-11-29' GROUP BY product_id, product_name, category -- 所有非聚合字段必须包含在此 ORDER BY total DESC;
补充说明
- 若需要排除首尾日期,可将WHERE条件改为
date > '2022-11-21' AND date < '2022-11-29' - 明确列出要展示的商品字段并同步添加到GROUP BY中,确保符合SQL规范
ORDER BY total DESC让结果按销量从高到低排序,和你提供的示例图展示逻辑一致- 若商品表和销售记录表分离(比如销售记录存在
tbl_sales),需用关联查询,示例如下:
SELECT p.product_id, p.product_name, p.category, COUNT(s.sale_id) AS total FROM tbl_product p JOIN tbl_sales s ON p.product_id = s.product_id WHERE s.sale_date BETWEEN '2022-11-21' AND '2022-11-29' GROUP BY p.product_id, p.product_name, p.category ORDER BY total DESC;
内容的提问来源于stack exchange,提问作者Arun Kumawat
相关产品推荐
相关产品推荐

