sql >> Database >  >> RDS >> Mysql

Onbekende kolom in veldlijst bij gebruik van SUM(iets) AS a

U kunt geen kolom selecteren die u op hetzelfde niveau heeft gedefinieerd in uw SELECT clausule. Als u een uitdrukking opnieuw wilt gebruiken, moet u een afgeleide tabel gebruiken:

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

Of je herhaalt natuurlijk gewoon de uitdrukking:

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

Als je alleen op die uitdrukking wilt bestellen, dan kan dat zonder trucjes (maar je kunt nog steeds niet SELECT de uitdrukking op hetzelfde niveau van uw zoekopdracht)

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

De reden hiervoor wordt uitgelegd in dit blogartikel hier

Kanttekening

Afgezien van de bovenstaande uitleg, denk ik natuurlijk niet dat uw vraag correct is. Aangezien je alleen groepeert op b.user , krijg je een willekeurige waarde voor a.user en waarschijnlijk zijn uw sommen onjuist en krijgt u naar mijn mening een toevallig cartesiaans product. Maar dat is een onderwerp voor een andere vraag.




  1. SQL Server Express-alternatieven boven de limiet van 2 GB

  2. MySQL Database kan niet starten op XAMPP voor Mac

  3. FlySpeed ​​SQL-query verbinden met Salesforce.com

  4. Moet id of tijdstempel worden gebruikt om de aanmaakvolgorde van rijen in een databasetabel te bepalen? (gezien de mogelijkheid van een verkeerd ingestelde systeemklok)