MySQL作业语句执行无结果返回,请求技术排查协助
排查你的MySQL查询无返回结果的问题
我来帮你拆解下问题根源,你的SQL语句里有两个关键错误,导致明明存在符合条件的数据却查不到结果:
错误1:用WHERE子句过滤聚合结果
WHERE子句的作用是在分组前筛选原始行数据,而invoice_avg是分组后才计算出来的聚合别名,这时候WHERE根本识别不了这个别名,也不能直接在WHERE里使用聚合函数。要过滤分组后的聚合结果,必须用HAVING子句。错误2:错误的引号使用
你用双引号"invoice_avg"把别名括起来了,在MySQL默认配置下,双引号会被解析成字符串常量,而不是你定义的列别名。也就是说你其实是在判断字符串"invoice_avg"是否大于300,这显然永远不成立,自然不会返回任何结果。ORDER BY里的双引号也犯了同样的错误。
修正后的SQL语句
SELECT vendor_id, SUM(invoice_total) AS invoice_gt, AVG(invoice_total) AS invoice_avg, COUNT(invoice_id) AS invoice_qty FROM invoices GROUP BY vendor_id HAVING invoice_avg > 300 ORDER BY invoice_avg DESC;
关键修改说明
- 将
WHERE "invoice_avg" > 300替换为HAVING invoice_avg > 300,HAVING是专门用来过滤分组后聚合结果的子句。 - 去掉别名周围的双引号,直接使用
invoice_avg,让MySQL正确识别这是我们定义的聚合列别名。 - ORDER BY子句里也直接使用
invoice_avg,确保按聚合后的平均值降序排序。
运行修正后的语句,应该就能得到你预期的结果了。
内容的提问来源于stack exchange,提问作者mildlylost
相关产品推荐
相关产品推荐

