您需要使用HAVING
條款含有聚集表達式來過濾。
如果你正在使用MySQL,你可以該條款爲其他RDBMS你不能在使用的列別名。
SELECT a.prim_id,
min(b.new_len * 36) as min_new_len,
max(b.new_len * 36) as max_new_len
FROM tb_first a
JOIN tb_second b
ON a.sec_id = b.sec_id /*<-- Use explicit JOIN syntax...*/
GROUP BY a.prim_id
HAVING min(b.new_len * 36) > 1900
AND max(b.new_len * 36) < 75000
ORDER BY avg(b.new_len * 36);
在許多RDBMS中,你也可以把查詢到內嵌視圖,並從選擇要使用的而不是重複的公式列別名。在這種情況下,您使用WHERE
如下。
SELECT prim_id,
min_new_len,
max_new_len
from (SELECT a.prim_id,
min(b.new_len * 36) as min_new_len,
max(b.new_len * 36) as max_new_len,
avg(b.new_len * 36) as avg_new_len
FROM tb_first a
JOIN tb_second b
ON a.sec_id = b.sec_id
GROUP BY a.prim_id) derived
WHERE min_new_len > 1900
AND max_new_len < 75000
ORDER BY avg_new_len;
您正在使用什麼RDBMS?如果你可以在'HAVING'子句中使用別名,它會有所不同嗎? – 2011-02-28 23:22:00