Sie können keine Spalte auswählen, die Sie in Ihrem SELECT
auf derselben Ebene definiert haben Klausel. Wenn Sie einen Ausdruck wiederverwenden möchten, müssen Sie auf eine abgeleitete Tabelle zurückgreifen:
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
Oder Sie wiederholen natürlich einfach den Ausdruck:
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
Wenn Sie nur nach diesem Ausdruck sortieren möchten, dann ist das ohne Tricks möglich (aber Sie können immer noch nicht SELECT
den Ausdruck auf der gleichen Ebene Ihrer Abfrage)
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
Der Grund dafür wird in diesem Blogartikel hier erklärt
Randbemerkung
Abgesehen von den obigen Erläuterungen halte ich Ihre Anfrage natürlich nicht für richtig. Da Sie nur nach b.user
gruppieren erhalten Sie einen zufälligen Wert für a.user
und wahrscheinlich sind Ihre Summen falsch, und Sie erhalten meiner Meinung nach ein zufälliges kartesisches Produkt. Aber das ist ein Thema für eine andere Frage.