Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unbekannte Spalte in Feldliste bei Verwendung von SUM(something) AS a

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.