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

Použití `rand()` s `having`

Myslím, že problém je v tom, že HAVING se aplikuje po GROUP BY, ale stále před fází SELECT. Uvědomuji si, že je to matoucí, protože klauzule HAVING odkazuje na sloupec z příkazu SELECT, ale myslím si, že v podstatě dvakrát provede vše, co je v příkazu SELECT – jednou pro příkaz have a poté znovu pro příkaz SELECT.

Např. viz tuto odpověď .

Všimněte si, že je to obzvláště matoucí, protože pokud odkazujete na název sloupce, který se neobjevuje v příkazu SELECT v klauzuli HAVING, vyvolá to chybu.

Např. tyto housle

Ale jak je uvedeno výše, stále vám to umožní filtrovat na základě výsledku funkce, která se neobjeví ve výstupu. Stručně řečeno, klauzule HAVING stále dělá to, co chcete, ale pomocí tohoto přístupu nemůžete filtrovat náhodnou hodnotu a zároveň ji zobrazovat. Pokud to potřebujete udělat, musíte nejprve hodnotu opravit pomocí dílčího dotazu a poté ji může filtrovat a zobrazit vnější dotaz.

Aby bylo jasno, pravděpodobně stojí za to použít pouze RAND() v klauzuli have, nikoli v části SQL. I když chápu, že tato otázka se ptá proč dělá to spíše než se snaží problém řešit konkrétně.




  1. Postgres:Přidejte omezení, pokud ještě neexistuje

  2. SQL – volání uložené procedury pro každý záznam

  3. OBJECTPROPERTY() vs OBJECTPROPERTYEX() v SQL Server:Jaký je rozdíl?

  4. Jak vygeneruji sérii hodinových průměrů v MySQL?