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

MySQL SELECT paling sering menurut grup

SELECT t1.*
FROM (SELECT tag, category, COUNT(*) AS count
      FROM tags INNER JOIN stuff USING (id)
      GROUP BY tag, category) t1
LEFT OUTER JOIN 
     (SELECT tag, category, COUNT(*) AS count
      FROM tags INNER JOIN stuff USING (id)
      GROUP BY tag, category) t2
  ON (t1.tag = t2.tag AND (t1.count < t2.count 
      OR t1.count = t2.count AND t1.category < t2.category))
WHERE t2.tag IS NULL
ORDER BY t1.count DESC;

Saya setuju ini terlalu banyak untuk satu kueri SQL. Setiap penggunaan GROUP BY di dalam subquery membuatku meringis. Anda dapat membuatnya terlihat lebih sederhana dengan menggunakan tampilan:

CREATE VIEW count_per_category AS
    SELECT tag, category, COUNT(*) AS count
    FROM tags INNER JOIN stuff USING (id)
    GROUP BY tag, category;

SELECT t1.*
FROM count_per_category t1
LEFT OUTER JOIN count_per_category t2
  ON (t1.tag = t2.tag AND (t1.count < t2.count 
      OR t1.count = t2.count AND t1.category < t2.category))
WHERE t2.tag IS NULL
ORDER BY t1.count DESC;

Tapi pada dasarnya melakukan pekerjaan yang sama di belakang layar.

Anda berkomentar bahwa Anda dapat melakukan operasi serupa dengan mudah dalam kode aplikasi. Jadi mengapa Anda tidak melakukan itu? Lakukan kueri yang lebih sederhana untuk mendapatkan jumlah per kategori:

SELECT tag, category, COUNT(*) AS count
FROM tags INNER JOIN stuff USING (id)
GROUP BY tag, category;

Dan urutkan hasilnya dalam kode aplikasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara menggunakan 'berbeda' dalam model zend db

  2. Bahasa arab di php/mysql muncul ???? tanda tanya di html

  3. Buat kolom spasial MySQL - Tipe Data Titik dengan panjang lat tanpa menggunakan tabel Alter

  4. Cara mengakses database MySql jarak jauh dari Aplikasi iPhone

  5. MYSQL TINYBLOB vs LONGBLOB