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
相关产品推荐
相关产品推荐

