Vous ne pouvez pas sélectionner une colonne que vous avez définie au même niveau dans votre SELECT
clause. Si vous souhaitez réutiliser une expression, vous devez recourir à une table dérivée :
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, bien sûr, vous répétez simplement l'expression :
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 vous voulez juste ordonner par cette expression, alors c'est possible sans aucune astuce (mais vous ne pouvez toujours pas SELECT
l'expression au même niveau de votre requête)
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 raison en est expliquée dans cet article de blog ici
Note complémentaire
En dehors des explications ci-dessus, bien sûr, je ne pense pas que votre requête soit correcte. Puisque vous regroupez uniquement par b.user
, vous obtiendrez une valeur aléatoire pour a.user
et probablement vos sommes sont incorrectes et vous obtenez un produit cartésien accidentel, à mon avis. Mais c'est un sujet pour une autre question.