为什么AVG在SQL的Where子句中不返回任何内容?

时间:2019-02-06 17:04:59

标签: sql

问的问题

“列出信用额度小于平均信用额度的客户的客户名称和电话号码。(客户表)”

到目前为止,我有

SELECT customerName, phone
FROM Customers 
WHERE creditLimit < (SELECT AVG (creditLimit)
                           FROM Products); 

但是此代码未返回任何内容,我在做什么错呢?谢谢。

1 个答案:

答案 0 :(得分:2)

如果Products有信用额度,我会感到惊讶。如果您限定列名,则将立即看到错误:

SELECT c.customerName, c.phone
FROM Customers c
WHERE c.creditLimit < (SELECT AVG(p.creditLimit)
                       FROM Products p
                      ); 

换句话说,您应该在子查询中使用Customers。发生的情况是查询的解释是这样的:

SELECT c.customerName, c.phone
FROM Customers c
WHERE c.creditLimit < (SELECT AVG(c.creditLimit)
                       FROM Products p
                      ); 

也就是说,子查询正在使用要比较的行中的creditLimit,而不是子查询中引用的表中使用(因为没有这样的列)。值永远不会小于其自身,因此它永远不会求值为true。

要学习的更重要的一课:始终限定您的列名,因此您再也不会遇到这样的问题。