sql >> Database teknologi >  >> RDS >> Mysql

Kompliceret COUNT forespørgsel i MySQL

X-Zero's forslag om at tilføje en "uploader-kredit" til dataene er den bedste måde at holde forespørgslen enkel på. Hvis det ikke er en mulighed, skal du lave en indre forbindelse mellem userprofile_videoinfo og userprofile_videocredit for at gøre det nemt at fjerne dubletter:

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

Underforespørgslen kan være nyttig at oprette som en visning.



  1. Eventuelle ulemper ved bitflag i databasekolonner?

  2. MyBatis Indsæt listeværdier

  3. Ukendt kolonneproblem med mysql-alias

  4. Oracles containere til J2EE (OC4J) i R12