2016-09-25 17 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 
查询