Mysql
 sql >> база данни >  >> RDS >> Mysql

Използване на `rand()` с `having`

Мисля, че проблемът е, че HAVING се прилага след GROUP BY, но все още преди фазата SELECT. Осъзнавам, че е объркващо, защото клаузата HAVING препраща към колона от оператора SELECT, но мисля, че по същество просто изпълнява всичко, което е в оператора SELECT, два пъти - веднъж за притежаването и след това отново за SELECT.

Например вижте този отговор .

Забележете, това е особено объркващо, защото ако се позовавате на име на колона, което не се появява в израза SELECT в клауза HAVING, това ще доведе до грешка.

Например тази цигулка

Но според тази цигулка по-горе, тя все пак ще ви позволи да филтрирате въз основа на резултата от функция, която не се появява в изхода. Накратко, клаузата HAVING все още прави това, което искате, но не можете едновременно да филтрирате произволна стойност и да я покажете едновременно, като използвате този подход. Ако трябва да направите това, първо трябва да използвате подзаявка, за да фиксирате стойността, след което външната заявка може да филтрира и показва върху нея.

Освен това, за да стане ясно, вероятно си струва просто да използвате RAND() в клаузата за име, а не в SQL частта. Въпреки че разбирам, че този въпрос пита защо прави това, вместо да се опитва конкретно да реши проблема.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MYSQL импортирайте CSV и след това сравнете и премахнете излишните записи

  2. Разрешаване на не ascii знаци в MySQL база данни

  3. MySQL клиент на командния ред за Windows

  4. Показване на данни от mysql ред като колона в php

  5. Каква е разликата между типовете DATE, TIME, DATETIME и TIMESTAMP