Mysql
 sql >> Database >  >> RDS >> Mysql

Colonna sconosciuta nell'elenco dei campi quando si utilizza SUM(qualcosa) AS a

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.