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

Używanie `rand()` z `having`

Myślę, że problem polega na tym, że HAVING jest stosowane po GROUP BY, ale jeszcze przed fazą SELECT. Zdaję sobie sprawę, że jest to mylące, ponieważ klauzula HAVING odwołuje się do kolumny z instrukcji SELECT, ale myślę, że po prostu wykonuje to, co jest w instrukcji SELECT dwa razy - raz za posiadanie, a potem ponownie za SELECT.

Na przykład zobacz tę odpowiedź .

Zauważ, że jest to szczególnie mylące, ponieważ jeśli odwołasz się do nazwy kolumny, która nie pojawia się w instrukcji SELECT w klauzuli HAVING, spowoduje to zgłoszenie błędu.

Np. te skrzypce

Ale zgodnie z powyższymi skrzypkami nadal pozwoli ci faktycznie filtrować na podstawie wyniku funkcji, która nie pojawia się w danych wyjściowych. Krótko mówiąc, klauzula HAVING nadal robi to, co chcesz, ale nie możesz jednocześnie filtrować losowej wartości i wyświetlać jej w tym samym czasie przy użyciu tego podejścia. Jeśli musisz to zrobić, musisz najpierw użyć podzapytania, aby naprawić wartość, a następnie zewnętrzne zapytanie może je filtrować i wyświetlać.

Ponadto, aby było jasne, prawdopodobnie warto użyć RAND() w klauzuli have, a nie w części SQL. Chociaż rozumiem, że to pytanie dotyczy dlaczego robi to, a nie próbuje rozwiązać problem konkretnie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wybrać wiersze w odwrotnej kolejności w MySQL?

  2. Jak mogę wywołać funkcję mysql (jak mysql_insert_id) z Perla, jeśli używam DBI/DBD?

  3. Optymalizacja MySQL ogromnej tabeli

  4. MySQL:Dlaczego 5. ID w klauzuli IN drastycznie zmienia plan zapytań?

  5. Import 1GO SQL File => ERROR 2013 (HY000) w wierszu 23:Utracono połączenie z serwerem MySQL podczas zapytania