Nie możesz wybrać kolumny zdefiniowanej na tym samym poziomie w SELECT
klauzula. Jeśli chcesz ponownie użyć wyrażenia, musisz skorzystać z tabeli pochodnej:
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
Lub oczywiście po prostu powtarzasz wyrażenie:
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
Jeśli chcesz po prostu uporządkować według tego wyrażenia, jest to możliwe bez żadnych sztuczek (ale nadal nie możesz SELECT
wyrażenie na tym samym poziomie zapytania)
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
Powód tego jest wyjaśniony w tym artykule na blogu tutaj
Uwaga boczna
Poza powyższymi wyjaśnieniami, oczywiście uważam, że Twoje zapytanie nie jest poprawne. Ponieważ grupujesz tylko według b.user
, otrzymasz losową wartość dla a.user
i prawdopodobnie twoje sumy są niepoprawne, a także, moim zdaniem, przypadkowy produkt kartezjański. Ale to temat na inne pytanie.