Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Grup MySQL oleh dan maks mengembalikan baris yang salah

Saya mengalami masalah ini sepanjang waktu. Ketika MySQL menjalankan fungsi agregat, untuk kolom non-agregat apa pun, itu hanya menarik data pertama yang dijalankannya untuk grup itu, apakah itu dari baris MAX atau tidak. Jadi yang harus Anda lakukan adalah mengurutkan data dalam kueri dalam sehingga maks berada di urutan pertama dalam grupnya. Lihat apakah ini berhasil untuk Anda:

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
;

Perhatikan bahwa saya tidak menggunakan fungsi MAX di sini. Mengurutkan berdasarkan skor turun dan kemudian mengelompokkan berdasarkan tanggal di kueri luar akan menarik skor tertinggi berdasarkan tanggal. Perhatikan juga bahwa saya meletakkan klausa WHERE di kueri dalam. Kueri dalam seperti ini (kadang-kadang diperlukan) tidak terlalu efisien, karena tidak memiliki indeks untuk kueri luar untuk dioptimalkan, jadi pastikan set hasil dalam Anda sekecil mungkin. Terakhir, perhatikan GROUP BY DATE(t.pubdate_utc). Jika saya tidak menguranginya menjadi hanya informasi tanggal, akan ada lebih dari 18 hasil, karena waktu juga dihitung.

Sunting:Diubah menjadi INTERVAL -17 DAY untuk memberikan hingga 18 hasil, bukan 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. Sintaks SQL SELECT – Didaftarkan oleh DBMS

  2. Nilai basis data kueri berdasarkan lokasi pengguna

  3. Prosedur Tersimpan MySQL vs. kueri kompleks

  4. Pengurangan dua nilai yang sama bukan nol di mysql

  5. iOS - Praktik Terbaik Sinkronisasi Data Inti dan Basis Data Server