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

MySQL group by и max връща грешни редове

Сблъсквам се с този проблем през цялото време. Когато MySQL стартира агрегатна функция, за всякакви неагрегирани колони, той просто извлича първите данни, които работи за тази група, независимо дали са от реда MAX или не. Така че това, което трябва да направите, е да подредите данните във вътрешна заявка, така че максималните стойности да са първи в техните групи. Вижте дали това работи за вас:

SELECT t.post_id,
       t.profile_id,
       t.score,
       t.pubdate_utc
FROM (SELECT p.profile_id,
             p.post_id,
             p.pubdate_utc,
             (pp.comments + pp.likes + pp.favorites) score
      FROM posts p
      JOIN posts_points pp ON p.post_id = pp.post_id
      WHERE p.pubdate_utc >= DATE_ADD(DATE(NOW()), INTERVAL -17 DAY)
      ORDER BY score DESC
     ) t
GROUP BY DATE(t.pubdate_utc) DESC
;

Забележете, че тук не използвам функция MAX. Подреждането по низходящ резултат и след това групирането по дата във външната заявка ще изведе най-високия резултат по дата. Също така забележете, че поставих клаузата WHERE във вътрешната заявка. Вътрешните заявки като тази (които понякога са необходими) не са много ефективни, тъй като нямат индекси за оптимизиране на външната заявка, така че се уверете, че вашият вътрешен набор от резултати е възможно най-малък. И накрая, обърнете внимание на GROUP BY DATE(t.pubdate_utc). Ако не го сведа само до информацията за датата, ще има много повече от 18 резултата, тъй като времената също се отчитат тогава.

Редактиране:Променено на INTERVAL -17 DAY за да дадете до 18 резултата вместо 19.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на MySQL път в командния ред

  2. Отстраняване на неизправности Няма такъв файл или директория, когато се изпълнява `php app/console doctrine:schema:create`

  3. импортирайте csv файл от външен FTP сайт

  4. mysql заявка ПОКАЗВАНЕ НА КОЛОНИ ОТ таблица като 'colmunname':questions

  5. mysql къде точно съвпадение