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

MySQL Group By и Order By

Едно просто решение е да обвиете заявката в подселекция с израза ORDER first и прилагане на GROUP BY по-късно :

SELECT * FROM ( 
    SELECT `timestamp`, `fromEmail`, `subject`
    FROM `incomingEmails` 
    ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)

Това е подобно на използването на присъединяването, но изглежда много по-добре.

Използването на неагрегирани колони в SELECT с клауза GROUP BY е нестандартно. MySQL обикновено връща стойностите на първия ред, който намира, и отхвърля останалите. Всички клаузи ORDER BY ще се прилагат само към върнатата стойност на колоната, а не към отхвърлените.

ВАЖНА АКТУАЛИЗАЦИЯ Изборът на неагрегирани колони е работил на практика, но не трябва да се разчита на него. Съгласно документацията на MySQL "това е полезно преди всичко, когато всички стойности във всяка неагрегирана колона, която не е наименувана в GROUP BY, са еднакви за всяка група. Сървърът е свободен да избира всяка стойност от всяка група, така че освен ако не са еднакви, избраните стойности са неопределени ."

От 5.7.5 ONLY_FULL_GROUP_BY е активиран по подразбиране, така че колоните, които не са обобщени, причиняват грешки в заявката (ER_WRONG_FIELD_WITH_GROUP)

Както @mikep посочва по-долу, решението е да използвате ANY_VALUE() от 5.7 и по-нови версии

Вижтеhttp://www.cafewebmaster.com/mysql-order-sort-group https://dev.mysql.com/doc /refman/5.6/en/group-by-handling.html https://dev.mysql.com/doc /refman/5.7/en/group-by-handling.html https://dev.mysql.com /doc/refman/5.7/en/miscellaneous-functions.html#function_any-value



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Въведение във Firebase

  2. Как да съхранявате Emoji символ в MySQL база данни

  3. Как да напиша REST API?

  4. Mysql, за да изберете месечен запис, дори ако данни не съществуват

  5. неуспешно търсене в пълен текст на mysql