No puede seleccionar una columna que haya definido en el mismo nivel en su SELECT
cláusula. Si desea reutilizar una expresión, debe recurrir al uso de una tabla derivada:
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, por supuesto, simplemente repite la expresión:
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
Si solo desea ordenar por esa expresión, entonces eso es posible sin ningún truco (pero aún no puede SELECT
la expresión en el mismo nivel de su consulta)
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
La razón de esto se explica en este artículo de blog aquí
Nota al margen
Además de las explicaciones anteriores, por supuesto, no creo que su consulta sea correcta. Dado que está agrupando solo por b.user
, obtendrá un valor aleatorio para a.user
y probablemente sus sumas sean incorrectas y obtenga un producto cartesiano accidental, en mi opinión. Pero ese es un tema para otra pregunta.