2016-09-25 19 views
2

我想在兩個詳細表(StandardCoursesStandardPosts)中計數StandardID
我寫了這個代碼如何計數子表中的ID?

Select es.StandardID, count(esc.StandardCourseID) as CourseIDCount, 
     count(esp.StandardPostID) as PostIDCount 
from EduStandards as es 
     left join EduStandardCourses as esc on es.StandardID = esc.StandardID 
     left join EduStandardPosts as esp on es.StandardID = esp.StandardID 
group by es.StandardID 

但它返回false結果:

StandardID | CourseID | PostID 
-----------+----------+-------- 
    3  |  2 | 2 
    4  |  1 | 1 
    5  |  1 | 0 
    9  |  1 | 0 

雖然它必須返回:

StandardID | CourseID | PostID 
-----------+----------+-------- 
    3  |  1 | 2 
    4  |  1 | 1 
    5  |  1 | 0 
    9  |  1 | 0 

回答

0

添加Distinctcount

Select es.StandardID, count(Distinct esc.StandardCourseID) as CourseIDCount, 
     count(esp.StandardPostID) as PostIDCount 
from EduStandards as es 
     left join EduStandardCourses as esc on es.StandardID = esc.StandardID 
     left join EduStandardPosts as esp on es.StandardID = esp.StandardID 
group by es.StandardID 

這是一個瘋狂的猜測,StandardCourseID可以有多個StandardPostID。我們可以寫出更合適的答案,如果有這三個表的樣本數據

或者Count子表第一

SELECT es.standardid, 
     esp.CourseIDCount, 
     Count(esp.standardpostid)   AS PostIDCount 
FROM edustandards AS es 
     LEFT JOIN (SELECT Count(StandardCourseID) AS CourseIDCount, 
         standardid 
        FROM edustandardcourses 
        GROUP BY standardid) AS esc 
       ON es.standardid = esc.standardid 
     LEFT JOIN edustandardposts AS esp 
       ON es.standardid = esp.standardid 
GROUP BY es.standardid 
0

您可能需要獲取計數搶先來自左側擺脫重複的連接。

SELECT es.standardid, 
esc.CourseIDCount, 
esp.PostIDCount 
FROM edustandards AS es 
LEFT JOIN 
(
    SELECT standardid, Count(StandardCourseID) AS CourseIDCount, 
    FROM edustandardcourses 
    GROUP BY standardid 
) AS esc 
ON es.standardid = esc.standardid 

LEFT JOIN 
(
    SELECT standardid, Count(StandardPostID) AS PostIDCount, 
    FROM edustandardposts 
    GROUP BY standardid 
) AS esp 
ON es.standardid = esp.standardid 
0

你可以嘗試這樣的

;WITH CTE_edustandardcourses AS 
(
    SELECT standardid, Count(StandardCourseID) AS StandardCourseCount, 
    FROM edustandardcourses 
    GROUP BY standardid 
), CTE_edustandardposts AS 
(
    SELECT standardid, Count(StandardPostID) AS StandardPostCount, 
    FROM edustandardposts 
    GROUP BY standardid 
) 
SELECT es.standardid, 
SC.StandardCourseCount AS CourseID, 
SP.StandardPostCount AS PostID 
FROM edustandards AS es 
LEFT JOIN CTE_edustandardcourses SC 
ON es.standardid = SC.standardid 
LEFT JOIN CTE_edustandardposts SP 
ON es.standardid = SP.standardid 
查詢