sql >> Databáze >  >> RDS >> Mysql

Použití klauzule count in where :neplatné použití funkce skupiny

Můžete použít pouze agregační funkce jako COUNT() v HAVING nebo v SELECT klauzule při GROUP BY se používá. WHERE klauzule funguje na řádcích, které pocházejí z FROM doložka. Neproběhla žádná agregace, takže agregační funkce nemají žádný smysl.

Vypadá to, že chcete najít v tabulce ZÁPIS všechny studenty, kteří se objevují více než jednou. Pak chcete získat více podrobností o těchto studentech. Existuje potenciálně mnoho způsobů, jak to udělat, ale já bych doporučil dílčí dotaz.

SELECT s.*
  FROM student AS s
  JOIN (
    SELECT e.sno
      FROM enroll AS e
     GROUP BY e.sno
    HAVING COUNT(*) > 1
  ) AS e
    ON e.sno = s.sno
 ORDER BY s.age DESC
 LIMIT 10

Dílčí dotaz za JOIN provede první výpočet (který mají studenti v ENROLL více řádků) a v podstatě vytvoří pseudotabulku se seznamem ID studentů. Protože provádíme vnitřní spojení, pouze řádky v tabulce STUDENT, které mají sno v našem poddotazu se zobrazí. O to se v podstatě postará ON doložka.

Protože jste v komentáři řekli, že chcete mít možnost uplatňovat na studenty další podmínky, přidal jsem nějaký příklad kódu, kde by se to stalo. Protože tyto informace pocházejí z tabulky STUDENT, lze je provést mimo poddotaz. Neuvedl jsi konkrétně, co „nejstarší studenti“ znamenají, takže jsem jen předpokládal, že chceš, aby se 10 nejstarších zapsalo do více kurzů. Měli byste být schopni upravit na základě vašich potřeb.

Dejte mi vědět, pokud něco z toho nedává smysl, a pokusím se to vysvětlit podrobněji.



  1. MySql Processlist plný záznamů spánku vedoucích k příliš mnoha připojením?

  2. jak přeskočit špatný řádek ve zdroji plochého souboru ssis

  3. Php volající skript zálohování databáze sqlserver, záložní soubor vytvořen a poté odstraněn

  4. Zend Db / Mysql - Vložit pomocí Select