Non puoi selezionare una colonna che hai definito allo stesso livello nel tuo SELECT
clausola. Se vuoi riutilizzare un'espressione, devi ricorrere all'utilizzo di una tabella derivata:
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
O, naturalmente, ripeti semplicemente l'espressione:
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
Se vuoi semplicemente ordinare in base a quell'espressione, allora è possibile senza trucchi (ma non puoi ancora SELECT
l'espressione allo stesso livello della tua query)
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
Il motivo è spiegato in questo articolo del blog qui
Nota a margine
A parte le spiegazioni di cui sopra, ovviamente, non penso che la tua domanda sia corretta. Poiché stai raggruppando solo per b.user
, otterrai un valore casuale per a.user
e probabilmente le tue somme non sono corrette così come ottieni un prodotto cartesiano accidentale, secondo me. Ma questo è un argomento per un'altra domanda.