sql >> Database >  >> RDS >> Mysql

Ingewikkelde COUNT-query in MySQL

De suggestie van X-Zero om een ​​"uploader-tegoed" aan de gegevens toe te voegen, is de beste manier om de zoekopdracht eenvoudig te houden. Als dat geen optie is, voer dan een inner join uit tussen userprofile_videoinfo en userprofile_videocredit om het verwijderen van dubbele bestanden gemakkelijk te maken:

SELECT u.id, u.full_name, COUNT(DISTINCT v.video_id) as credit_count
FROM userprofile_userprofile u
LEFT JOIN (SELECT vi.video_id, vi.uploaded_by_id, vc.profile_id as credited_to_id
    FROM userprofile_videoinfo vi
    JOIN userprofile_videocredit vc ON vi.id = vc.video_id
    ) v ON u.id = v.uploaded_by_id OR u.id = v.credited_to_id
GROUP BY u.id, u.full_name
ORDER BY credit_count DESC

De subquery kan handig zijn om als weergave te maken.



  1. Kan geen instructies voor gegevensmanipulatie uitgeven met executeQuery()

  2. Zoekopdrachten voor het volgende en vorige element optimaliseren

  3. hoe tegenovergestelde resultaten te krijgen van een zoekopdracht Laravel

  4. MYSQL-query die 'resource-ID#12 retourneert in plaats van de numerieke waarde die het zou moeten retourneren