Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Coluna desconhecida na lista de campos ao usar SUM(something) AS a


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.