Você não pode selecionar uma coluna que você definiu no mesmo nível em seu
SELECT
cláusula. Se você quiser reutilizar uma expressão, você deve recorrer ao uso de uma tabela 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
Ou, claro, você simplesmente repete a expressão:
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 você deseja apenas ordenar por essa expressão, isso é possível sem nenhum truque (mas você ainda não pode
SELECT
a expressão no mesmo nível de sua 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
A razão para isso é explicada neste artigo do blog aqui
Nota lateral
Além das explicações acima, é claro, não acho que sua pergunta esteja correta. Como você está agrupando apenas por
b.user
, você obterá um valor aleatório para a.user
e provavelmente suas somas estão incorretas, assim como você obtém um produto cartesiano acidental, na minha opinião. Mas isso é assunto para outra pergunta.