SELECT AVG(`col5`)
FROM `table1`
WHERE `id` NOT IN (
SELECT `id` FROM `table2`
WHERE `col4` = 5
)
group by `col2` having sum(`col3`) > 0
UNION
SELECT MAX(`col5`)
FROM `table1`
WHERE `id` NOT IN (
SELECT `id` FROM `table2`
WHERE `col4` = 5
)
group by `col2` having sum(`col3`) = 0
出於可讀性和性能的原因,我認爲這個代碼可以重構。但是如何?如何重構這個MySQL代碼?
EDITIONS
除去外選擇
作出的第一選擇返回的總和,而第二個返回另一個值
取代
SUM
通過AVG
我很困惑,因爲你有'GROUP BY',但沒有'SELECT'中的聚合列。你回來什麼專欄? – 2010-04-20 19:43:34
@馬庫斯我糾正了這個例子,以反映爲什麼有一個工會的真正原因 – 2010-04-20 20:26:13
你不需要'UNION'。考慮使用「IF」功能。看到我的答案在下面更新。 – codeholic 2010-04-21 22:03:17