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

Подредете по максимална стойност в три различни колони

може е възможно да се направи в заявка за избор (евентуално като се използва нещо като case when макар че не съм сигурен, че това е разрешено в order by самата клауза, YMMV в зависимост от СУБД), но рядко е добра идея да използвате изчисления на ред, ако искате вашата база данни да се мащабира добре, докато таблиците стават по-големи („няма производителността на еднокрако прасе в конно надбягване“ , както красноречиво се изразява един от нашите администратори на база данни).

В ситуации като тази настроих допълнителна (индексирана) колона, за да задържа максимума и да гарантирам, че целостта на данните се поддържа, като използвам тригер за вмъкване/актуализация, за да принудя тази нова колона до максимума от останалите три.

Тъй като повечето таблици на базата данни се четат много по-често, отколкото се записват, това амортизира разходите за изчисление за всички четения. Разходите се поемат само когато данните се актуализират и заявките стават ослепително бързи, тъй като поръчвате в една, индексирана колона:

select f1, f2, f3 from t order by fmax desc;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO и MySQL "между"

  2. Изваждане на един ред данни от друг в SQL

  3. MySQL избира горните редове със същите стойности на условието

  4. Промяна на паролата за root на MySQL

  5. SQL:НЕ В алтернатива за избор на редове въз основа на стойности на *различни* редове?