MySQL中(按mct.MasterTableid划分)的计数(*)的替代方法
有没有更好的方法将下面的SQL Server查询转换为MySQLMySQL中(按mct.MasterTableid划分)的计数(*)的替代方法,mysql,sql,sql-server,Mysql,Sql,Sql Server,有没有更好的方法将下面的SQL Server查询转换为MySQL SELECT mct.MasterTableid, mct.MasterTablename, mct.MasterTableorderid, ct.CategoryTableid, ct.CategoryTablename, ct.CategoryTableorderid, COUNT(*) OVER (PARTITION BY mct
SELECT mct.MasterTableid,
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid,
COUNT(*) OVER (PARTITION BY mct.MasterTableid) AS CoursesCount,
COUNT(scct.CategoryTabledetailid) AS ChaptersCount
FROM MasterTable tm
INNER JOIN CategoryTable t
ON ct.MasterTableid = mct.MasterTableid
INNER JOIN SubCategoryTable td
ON ct.CategoryTableid = scct.CategoryTableid
WHERE ct.isdeleted = 0
AND mct.isdeleted = 0
AND scct.isdeleted = 0
GROUP BY mct.MasterTableid,
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid
ORDER BY mct.MasterTableorderid,
ct.CategoryTableorderid
MySQL中mct.MasterTableid分区计数*的替代方法您可以计算MasterTable中的每个MasterTableid并加入结果
SELECT mct.MasterTableid,
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid,
mxt_cnt.CoursesCount,
Count(scct.CategoryTabledetailid) AS ChaptersCount
FROM MasterTable mct
INNER JOIN CategoryTable ct
ON ct.MasterTableid = mct.MasterTableid
INNER JOIN SubCategoryTable scct
ON ct.CategoryTableid = scct.CategoryTableid
INNER JOIN (SELECT MasterTableid,
Count(1) AS CoursesCount
FROM MasterTable
WHERE isdeleted = 0
GROUP BY MasterTableid) mxt_cnt
ON mxt_cnt.MasterTableid = mct.MasterTableid
WHERE ct.isdeleted = 0
AND mct.isdeleted = 0
AND scct.isdeleted = 0
GROUP BY mct.MasterTableid,
mxt_cnt.CoursesCount, -- Added in Group by
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid
ORDER BY mct.MasterTableorderid,
ct.CategoryTableorderid
也可以使用相关子查询
这并没有完全解决我的问题,但给了我解决问题的暗示
SELECT mct.MasterTableid,
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid,
mxt_cnt.CoursesCount,
(SELECT Count(1) AS CoursesCount
FROM MasterTable mxt_cnt
WHERE mxt_cnt.MasterTableid = mct.MasterTableid
AND mxt_cnt.isdeleted = 0) AS CoursesCount,
Count(scct.CategoryTabledetailid) AS ChaptersCount
FROM MasterTable mct
INNER JOIN CategoryTable ct
ON ct.MasterTableid = mct.MasterTableid
INNER JOIN SubCategoryTable scct
ON ct.CategoryTableid = scct.CategoryTableid
WHERE ct.isdeleted = 0
AND mct.isdeleted = 0
AND scct.isdeleted = 0
GROUP BY mct.MasterTableid,
mct.MasterTablename,
mct.MasterTableorderid,
ct.CategoryTableid,
ct.CategoryTablename,
ct.CategoryTableorderid
ORDER BY mct.MasterTableorderid,
ct.CategoryTableorderid