Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nieznana kolumna na liście pól przy użyciu SUM(coś) AS a

Nie możesz wybrać kolumny zdefiniowanej na tym samym poziomie w SELECT klauzula. Jeśli chcesz ponownie użyć wyrażenia, musisz skorzystać z tabeli pochodnej:

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

Lub oczywiście po prostu powtarzasz wyrażenie:

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

Jeśli chcesz po prostu uporządkować według tego wyrażenia, jest to możliwe bez żadnych sztuczek (ale nadal nie możesz SELECT wyrażenie na tym samym poziomie zapytania)

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

Powód tego jest wyjaśniony w tym artykule na blogu tutaj

Uwaga boczna

Poza powyższymi wyjaśnieniami, oczywiście uważam, że Twoje zapytanie nie jest poprawne. Ponieważ grupujesz tylko według b.user , otrzymasz losową wartość dla a.user i prawdopodobnie twoje sumy są niepoprawne, a także, moim zdaniem, przypadkowy produkt kartezjański. Ale to temat na inne pytanie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sails-mysql:ER_NO_DB_ERROR:Nie wybrano bazy danych

  2. MySql, Postgres, Oracle i SQLServer ignorowanie filtra NIE JEST NULL

  3. jak uciec z danych wejściowych, ale zapisać bez ucieczki do bazy danych

  4. Jak zachować znaki specjalne podczas uruchamiania ./mysqldump?

  5. Konwersja z mysql do mysqli (mysql_fetch_array)