sql >> Databasteknik >  >> RDS >> Mysql

Okänd kolumn i fältlistan när SUM(något) används som en

Du kan inte välja en kolumn som du har definierat på samma nivå i din SELECT klausul. Om du vill återanvända ett uttryck måste du använda en härledd tabell:

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 så upprepar du helt enkelt uttrycket:

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

Om du bara vill beställa efter det uttrycket så är det möjligt utan några knep (men du kan fortfarande inte SELECT uttrycket på samma nivå som din fråga)

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

Anledningen till detta förklaras i den här bloggartikeln här

Sidoanteckning

Bortsett från ovanstående förklaringar tror jag naturligtvis inte att din fråga är korrekt. Eftersom du bara grupperar efter b.user , får du ett slumpmässigt värde för a.user och förmodligen är dina summor felaktiga samt att du får en oavsiktlig kartesisk produkt, enligt mig. Men det är ett ämne för en annan fråga.




  1. Jquery, dra och släpp och spara till mysql-databas?

  2. mysql - ERROR 1064 (42000) när du använder nyckelord som kolumnnamn

  3. Vad är JDBC-motsvarigheten till Postgres \connect-kommando?

  4. Google Vis kommenterad tidslinje från SQL-databas med PHP JSON-problem