J'ai une table utilisateur (Utilisateur) et 3 tables de tutoriel (Texte, Vidéo et Autre). Chaque tutoriel a les colonnes rating_positive
et rating_negative
et est lié à un utilisateur (id).Comment grouper des colonnes résumées de différentes tables?
Je veux sélectionner les 10 utilisateurs avec le plus de tutoriels et la somme des évaluations positives/négatives de leurs tutoriels.
J'ai essayé la requête suivante mais cela ne fonctionne pas. Il renvoie beaucoup trop de résultats pour tutorials_count/pos/neg. Comment puis-je le faire correctement?
SELECT
u.id AS user_id,
(COUNT(t.id) + COUNT(v.id) + COUNT(o.id)) AS tutorials_count,
(SUM(t.rating_positive) + SUM(v.rating_positive) + SUM(o.rating_positive)) AS pos,
(SUM(t.rating_negative) + SUM(v.rating_negative) + SUM(o.rating_negative)) AS neg
FROM
user u LEFT JOIN trick t ON u.id = t.submitter_id
LEFT JOIN video v ON u.id = v.submitter_id
LEFT JOIN other o ON u.id = o.submitter_id
GROUP BY u.id
ORDER BY tutorials_count DESC
LIMIT 10
cela fonctionne. :-) Y a-t-il encore une meilleure requête avec une performance plus rapide? – Smock