sql >> Databasteknik >  >> RDS >> Mysql

Begränsa resultat på en GROUP_CONCAT() eller INNER JOIN

Dessa avancerade är det som får mig att älska 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

Jag får i princip alla rader och slänger alla foton som är 6 eller högre i beräknat antal.



  1. BESTÄLL AV i en SQL Server 2008-vy

  2. Visa MySQL-resultat efter datum

  3. Installera MySQL med ansible på ubuntu

  4. SQL-frågan fungerar i konsolen men inte i python