मेरी समझ के आधार पर, यहाँ वह प्रश्न है जिसके साथ मैं आया हूँ:
SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM
(
SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount
FROM (
SELECT m.id memberId, COUNT(*) goalsCount
FROM Members m
JOIN Goals g
ON m.id = g.member_id
GROUP BY member_id
) innerQuery
JOIN Members m
ON innerQuery.memberId = m.id
GROUP BY m.team_id
) inner_1
RIGHT JOIN
(
SELECT t.id, t.name, COUNT(*) membersCount
FROM Teams t
JOIN Members m
ON t.id = m.team_id
GROUP BY team_id
) inner_2
ON inner_1.team_id = inner_2.id
क्वेरी का विश्लेषण:
# 1। इससे जुड़े लक्ष्यों की संख्या (इनरक्वेरी) के साथ सदस्य आईडी पाएं
SELECT m.id memberId, COUNT(*) goalsCount
FROM Members m
JOIN Goals g
ON m.id = g.member_id
GROUP BY member_id
#2. लक्ष्यों के कुल योग के साथ टीम आईडी प्राप्त करें (आंतरिक_1)
SELECT m.team_id, SUM(innerQuery.goalsCount) totalCount
FROM (
.... Sub-query in step 1
) innerQuery
JOIN Members m
ON innerQuery.memberId = m.id
GROUP BY m.team_id
#3. प्रति टीम कुल सदस्यों की संख्या प्राप्त करें (आंतरिक_2)
SELECT t.id, t.name, COUNT(*) membersCount
FROM Teams t
JOIN Members m
ON t.id = m.team_id
GROUP BY team_id
#4. राइट जॉइन इनर_1 और इनर_2 (चूंकि न्यूल होगा) और उस 0 को जांचने और बदलने के लिए IFNULL का उपयोग करें
SELECT name, membersCount, IFNULL(totalCount, 0) goalsCount FROM
(
.... Sub-query in step 2
) inner_1
RIGHT JOIN
(
.... Sub-query in step 3
) inner_2
ON inner_1.team_id = inner_2.id