Не можете да изберете колона, която сте дефинирали на същото ниво във вашия SELECT
клауза. Ако искате да използвате повторно израз, трябва да прибегнете до използването на производна таблица:
SELECT x.*, (common_p_count+common_r_count)
FROM (
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
) x
Или, разбира се, просто повтаряте израза:
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count,
(SUM(a.post = b.post) + SUM(a.option = b.option))
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
Ако просто искате да подредите по този израз, тогава това е възможно без никакви трикове (но все още не можете да SELECT
изразът на същото ниво на вашата заявка)
SELECT
a.user AS a_user,
b.user AS b_user,
SUM(a.post = b.post) AS common_p_count,
SUM(a.option = b.option) AS common_r_count
FROM response a, response b
WHERE a.user = '1' AND b.user != '1' group by b.user
ORDER BY common_p_count + common_r_count
Причината за това е обяснена в тази статия в блога тук
Странична бележка
Освен горните обяснения, разбира се, не смятам, че вашето запитване е правилно. Тъй като групирате само по b.user
, ще получите произволна стойност за a.user
и вероятно сумите ви са неверни, както и получавате случайно декартово произведение, според мен. Но това е тема за друг въпрос.