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

SELECT查询中计算单条商品折扣的SQL语句异常求助

问题分析与解决方案

你遇到的问题核心是误用了聚合函数SUM()——这个函数会把所有行的计算结果汇总成一个单一值,所以你只能得到一条记录,而不是每条商品对应的折扣。

错误原因

你的SQL里用了SUM((pricebefore - price ) / price * 100),SUM是用来对多行数据进行求和计算的聚合函数,这会让数据库把所有符合条件的行的折扣值加总,最终只返回一行汇总结果,自然看不到每条商品的单独折扣。

正确的SQL语句

只需要去掉SUM(),直接计算每条记录的折扣即可:

$sql = "SELECT *, ((pricebefore - price) / price) * 100 AS discount FROM products WHERE price IS NOT NULL ORDER BY ID desc LIMIT $no_of_records_per_page OFFSET $offset";

额外优化建议

  • 为了避免price为0时出现除以0的错误,可以在WHERE条件里加上price > 0,确保计算安全:
    $sql = "SELECT *, ((pricebefore - price) / price) * 100 AS discount FROM products WHERE price IS NOT NULL AND price > 0 ORDER BY ID desc LIMIT $no_of_records_per_page OFFSET $offset";
    
  • 如果需要对折扣值进行四舍五入(比如保留两位小数),可以用ROUND()函数:
    $sql = "SELECT *, ROUND(((pricebefore - price) / price) * 100, 2) AS discount FROM products WHERE price IS NOT NULL AND price > 0 ORDER BY ID desc LIMIT $no_of_records_per_page OFFSET $offset";
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:35:41