2011-08-11 35 views
1

這有可能簡化:如何簡化SQL查詢中的可重複模式?

SELECT GREATEST(a,b) 
FROM my_table 
WHERE GREATEST(a,b) > 25 

喜歡的東西:

SELECT GREATEST(a,b) AS max_a_b 
FROM my_table 
WHERE max_a_b > 25 

這種嘗試的回報:

Unknown column 'max_a_b' in 'where clause' 
+0

你知道你**不能**在'where'子句中使用聚合函數,你需要使用'having'而不是'having'子句,你可以使用別名: - ) – Johan

+0

解釋什麼使別名比擁有最大(a,b)兩次更簡單。我看不到任何簡化。 –

回答

4
SELECT GREATEST(a,b) AS max_a_b 
FROM my_table 
HAVING max_a_b > 25 

如果您使用having子句,那麼在您的別名不存在的地方存在。

3
SELECT max_a_b 
FROM (SELECT GREATEST(a,b) AS max_a_b 
     FROM my_table) 
WHERE max_a_b > 25 

這應該工作,但它是有問題的,如果這簡化查詢。 在WHERE子句中重複GREATEST(a,b)沒問題,imo。

1

MySQL不運行GREATEST(a,b)兩次,因爲它的價值。

-1

該聲明仍然很簡單。當你的問題是關於優化的時候,那麼DBMS比你更好。