MySQL中(按mct.MasterTableid划分)的计数(*)的替代方法

MySQL中(按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

有没有更好的方法将下面的SQL Server查询转换为MySQL

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