比较SQL中的值时没有结果

时间:2016-01-03 11:34:57

标签: mysql sql

我刚写了以下SQL查询:

SELECT * from (SELECT voornaam, achternaam, TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE())
AS Leeftijd FROM leiding)  
AS kolommen  
HAVING Leeftijd < AVG(Leeftijd)  
ORDER BY Leeftijd;  

它不会返回任何结果,但是当我单独执行这些查询时,它们会给出结果:

SELECT AVG(Leeftijd) from (SELECT voornaam, achternaam, TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) AS Leeftijd FROM leiding) AS kolommen;  

返回&#39; 19.3571&#39;和

SELECT Leeftijd from (SELECT voornaam, achternaam, TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) AS Leeftijd FROM leiding) AS kolommen;  

返回年龄列表,范围从25到18 有谁知道出了什么问题?提前谢谢!

3 个答案:

答案 0 :(得分:0)

以前答案的组合应该有效:

SELECT 
    voornaam, 
    achternaam, 
    TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) AS Leeftijd
from 
    leiding
WHERE 
    TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE()) < (select AVG(TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE())) from  leiding)
ORDER BY 
    Leeftijd
;

第一个是在WHERE子句中使用聚合函数,在SQL中是禁止的,第二个是使用HAVING作为WHERE,这只是坏事。哦,你把TIMESTAMPDIFF(YEAR,geboortedatum,CURDATE())作为Leeftijd获取,可能你的表中有你的名字列......

所以,这种组合应该适合你。

答案 1 :(得分:-1)

使用WHERE代替HAVINGHAVINGGROUP BY关键字一起使用,而不是单一 所以写这个查询

SELECT * from (SELECT voornaam, achternaam, TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE())
AS Leeftijd FROM leiding)  
AS kolommen  
GROUP BY Leeftijd
HAVING Leeftijd < AVG(Leeftijd)  
ORDER BY Leeftijd;  
  

MySQL HAVING子句在SELECT语句中用于指定   过滤一组行或聚合的条件。

     

MySQL HAVING子句通常与GROUP BY子句一起使用。什么时候   使用GROUP BY子句,我们可以将过滤条件应用于   出现在GROUP BY子句中的列。如果是GROUP BY子句   省略,HAVING子句的行为类似于WHERE子句。

http://www.mysqltutorial.org/mysql-having.aspx

答案 2 :(得分:-1)

当您在查询中使用select avg(列)时,您获得行值的平均值,而不是所有行的平均值,因此您的查询应为:

SELECT * from (SELECT voornaam, achternaam, TIMESTAMPDIFF(YEAR, geboortedatum, CURDATE())
AS Leeftijd FROM leiding)  
AS kolommen  
HAVING Leeftijd < (select AVG(Leeftijd) from  leiding)
ORDER BY Leeftijd;