MySQL/MariaDB查询:按平均佣金率降序排列销售员
问题原因
你编写的SQL使用了聚合函数AVG()计算平均佣金率,但没有添加GROUP BY子句对销售员进行分组,数据库会将所有匹配到的销售记录合并为一行计算全量平均佣金率,无法得到每个销售员对应的单独结果。
正确写法
SELECT s.name, AVG(p.commissionRate) AS avg_commission_rate FROM Salesman s INNER JOIN Purchases p ON s.empId = p.empId GROUP BY s.empId, s.name ORDER BY avg_commission_rate DESC;
说明
- 这里选择显式用
INNER JOIN+ON指定关联条件,比NATURAL JOIN更稳妥,避免后续表结构新增同名字段时关联逻辑出错 - 分组时同时指定
empId和name,是为了避免存在同名销售员时,不同人的销售记录被错误合并计算 - 如果你需要展示所有销售员(包括没有成单记录、平均佣金率为NULL的),将
INNER JOIN替换为LEFT JOIN即可 - 最终运行结果会按平均佣金率从高到低排序,符合需求
内容的提问来源于stack exchange,提问作者Sl33pyWalrus
相关产品推荐
相关产品推荐

