首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(mct.MasterTableid分区)在MySQL中计数(*)的替代方法

(mct.MasterTableid分区)在MySQL中计数(*)的替代方法
EN

Stack Overflow用户
提问于 2017-01-15 01:36:05
回答 1查看 3.6K关注 0票数 0

是否有更好的方法将下面的Server查询转换为MySQL?

代码语言:javascript
复制
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划分)上

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-15 02:07:08

您可以在count表中对每个MasterTableid进行MasterTableid,并对结果进行join

代码语言:javascript
复制
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 

或者您可以使用Correlated sub-query

代码语言:javascript
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41656937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档