MySQL有一個(gè)聚合函數(shù)HAVING,可以用于根據(jù)聚合值過(guò)濾結(jié)果集。HAVING語(yǔ)句的基本語(yǔ)法如下:
SELECT column1, column2,aggregate_function(column3)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING aggregate_function(column3) condition;
上面的例子中,HAVING語(yǔ)句通常用于與GROUP BY語(yǔ)句一起使用,以過(guò)濾基于自定義聚合函數(shù)的結(jié)果集。
比如,以下的SQL語(yǔ)句查詢每個(gè)部門的最高平均工資:
SELECT department, MAX(avg_salary) as max_avg_salary
FROM (
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
) t1
GROUP BY department
HAVING max_avg_salary >= 5000;
上面的SQL語(yǔ)句中,HAVING語(yǔ)句使用了MAX聚合函數(shù)來(lái)過(guò)濾結(jié)果集。它選擇了每個(gè)部門的最高平均工資,并僅返回大于或等于5000的結(jié)果。
特別要注意的是,我們不能在HAVING語(yǔ)句中使用子查詢中的自定義聚合函數(shù)。這是因?yàn)镸ySQL規(guī)定,HAVING語(yǔ)句只能使用SELECT語(yǔ)句中的列或聚合函數(shù)。
如果你需要在HAVING語(yǔ)句中使用自定義聚合函數(shù),你必須把這個(gè)聚合函數(shù)的計(jì)算放到SELECT語(yǔ)句中,然后在HAVING語(yǔ)句中調(diào)用它。