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

Batasi hasil pada GROUP_CONCAT() atau INNER JOIN

Yang canggih inilah yang membuat saya menyukai MySQL :)

SELECT user_id, user_name, 
    GROUP_CONCAT(CONVERT(photo_id, char(32)) ORDER BY photos.average_rate) as photo_ids
FROM (  SELECT user_id, user_name, photo_id, favorite_count, photo_count, 
            (case when @user_id = user_id then @rownum := @rownum + 1 else CONCAT(@rownum := 1, @user_id := user_id) end) AS dummy_val
        FROM (  SELECT users.user_id, users.user_name, users.favorite_count, users.photo_count, photos.photo_id
                FROM users 
                INNER JOIN photos
                ON photos.user_id=users.user_id
                WHERE users.day_of_birth = DATE_FORMAT('2012-04-17', '%m-%d') 
                    AND users.photo_count > 0 
                ORDER BY users.id ASC, photos.average_rate ASC
             ) AS h, 
             (  @rownum := NULL, 
                @user_id := NULL
             ) AS vars
        HAVING rownum <= 5) AS h2
GROUP BY user_id
ORDER BY favorite_count DESC, photo_count DESC LIMIT 0, 10

Pada dasarnya saya mendapatkan semua baris, dan membuang semua foto yang berjumlah 6 atau lebih tinggi dalam jumlah baris yang dihitung.



  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 Memperbaiki Peringatan Penasihat Keamanan MySQL

  2. Kueri yang bersikeras pada kolom di klausa 'Pesan Berdasarkan' cocok dengan kolom di klausa 'Kelompokkan menurut'

  3. Tidak ada penyedia Entity Framework yang ditemukan untuk penyedia ADO.NET 'MySql.Data.MySqlClient'

  4. Bagaimana mungkin sub-grup memiliki kolom kenaikan yang dihasilkan ditambahkan dalam kueri sql?

  5. Flask SqlAlchemy menggabungkan dua model tanpa kunci asing MYSQL