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

Ukendt kolonne i feltlisten ved brug af SUM(noget) AS en

Du kan ikke vælge en kolonne, som du har defineret på samme niveau i din SELECT klausul. Hvis du vil genbruge et udtryk, skal du ty til at bruge en afledt tabel:

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

Eller du gentager selvfølgelig blot udtrykket:

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

Hvis du bare vil bestille efter det udtryk, så er det muligt uden nogen tricks (men du kan stadig ikke SELECT udtrykket på samme niveau som din forespørgsel)

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

Årsagen til dette er forklaret i denne blogartikel her

Sidebemærkning

Bortset fra ovenstående forklaringer, tror jeg selvfølgelig ikke, at din forespørgsel er korrekt. Da du kun grupperer efter b.user , får du en tilfældig værdi for a.user og sandsynligvis er dine summer forkerte, ligesom du får et utilsigtet kartesisk produkt, efter min mening. Men det er et emne for et andet spørgsmål.




  1. 6 måder at konvertere en streng til en dato/tidsværdi i SQL Server

  2. FEJL 2068 (HY000):LOAD DATA LOCAL INFILE filanmodning blev afvist på grund af adgangsbegrænsninger

  3. Søg i et kolonnenavn på tværs af alle databaser

  4. PDO bindValue med \PDO::PARAM_BOOL får sætningsudførelse til at mislykkes stille