1:COUNT DISTINCT

        SELECT 
        COUNT(DISTINCT [QS_QuestionStem].Id)  AS ReqCount1,
        [QS_QuestionStem].Content AS Content
        FROM [EL_QuestionBank].[QS_QuestionStem] AS [QS_QuestionStem]
        INNER JOIN [EL_QuestionBank].[QS_QuestionProperty] AS [QS_QuestionProperty]
        ON [QS_QuestionStem].Id=[QS_QuestionProperty].[QuestionStemCode]
        INNER JOIN [EL_QuestionBank].[QuestionCategory] AS [QuestionCategory]
        ON [QuestionCategory].Id=[QS_QuestionProperty].SubjectCode
        LEFT JOIN [EL_QuestionBank].[QS_QuestionOptions] AS [QS_QuestionOptions]
        ON [QS_QuestionOptions].QuestionStemCode=[QS_QuestionStem].Id
        WHERE [QuestionCategory].Id=@CategoryIds OR charindex(@CategoryIds,[QuestionCategory].ParentIds )>0
        AND [QS_QuestionStem].QuestionFaceCode IS null
        GROUP BY [QS_QuestionStem].Content

2:DENSE_RANK Vs ROW_NUMBER

        SELECT 
        DENSE_RANK() OVER (ORDER By [QS_QuestionStem].Id) AS X,
        ROW_NUMBER() OVER (ORDER By [QS_QuestionStem].Id) AS Y,
        COUNT([QS_QuestionStem].Id) OVER()  AS ReqCount2,
        [QS_QuestionStem].Content AS Content
        FROM [EL_QuestionBank].[QS_QuestionStem] AS [QS_QuestionStem]
        INNER JOIN [EL_QuestionBank].[QS_QuestionProperty] AS [QS_QuestionProperty]
        ON [QS_QuestionStem].Id=[QS_QuestionProperty].[QuestionStemCode]
        INNER JOIN [EL_QuestionBank].[QuestionCategory] AS [QuestionCategory]
        ON [QuestionCategory].Id=[QS_QuestionProperty].SubjectCode
        LEFT JOIN [EL_QuestionBank].[QS_QuestionOptions] AS [QS_QuestionOptions]
        ON [QS_QuestionOptions].QuestionStemCode=[QS_QuestionStem].Id
        WHERE [QuestionCategory].Id=@CategoryIds OR charindex(@CategoryIds,[QuestionCategory].ParentIds )>0
        AND [QS_QuestionStem].QuestionFaceCode IS null

3:关于 Count

DECLARE         @CategoryIds varchar(max)='5315f8616e174094ac7251f2e3c4d584';                --分类ID
--DECLARE         @CategoryIds varchar(max)='1';                --分类ID
DECLARE         @PageNumber int=1;                        --页码
DECLARE         @PageSize int=20;                            --页大小
DECLARE         @Fettle int=1;                        --冻结状态
DECLARE         @RecieveState int=2;                    --接收状态:0共享的所有数据;1:未接收;2:已接受
DECLARE         @RecieveStateConstraint bit=NULL;            --约束接收状态(如果为真,则严格按照此值进行过滤)
DECLARE         @AuditState int =null;                    --审核状态
DECLARE         @AuditStateCustom int=null;                --审核状态:2:已审核;小于2:未开始、审核中
DECLARE         @Total int=0;                        --输出参数,总条数

--SELECT * FROM EL_QuestionBank.QuestionCategory
--with tempGR as( select row_number() over( order by A.Id) as ReqIndex ,COUNT(A.Id) OVER() as ReqCount , A.*
--                    from EL_CourseMaker.Course A where CATEGORYID = '1' )
--select * from tempGR where ReqIndex between -99 and 0 order by name

with tempGR as(
    SELECT
        DISTINCT(
            CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id + 'XXXX'
                  WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode + 'YYYY'
            END) AS XId,
--        DENSE_RANK() OVER (
--            ORDER By (
--                CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id
--                      WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode
--                END)) AS Y,
        DENSE_RANK() OVER (
            ORDER By (
                CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id
                      WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode
                END)) AS ReqIndex,
--                MAX(Y),
--        COUNT(*) OVER(ORDER BY [QS_QuestionStem].Id) AS REQCOUNT,
        [QS_QuestionProperty].Difficult AS Difficult,
--        COUNT(distinct coalesce([QS_QuestionStem].Id,[QS_QuestionStem].QuestionFaceCode))  AS ReqCount,
        COUNT((
                CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id
                      WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode
                END)) OVER()  AS ReqCount,
        (CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Content
             WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN(SELECT CONTENT FROM [EL_QuestionBank].[QS_QuestionFace] WHERE ID= [QS_QuestionStem].QuestionFaceCode)
        END) AS Content
        FROM [EL_QuestionBank].[QS_QuestionStem] AS [QS_QuestionStem]
        INNER JOIN [EL_QuestionBank].[QS_QuestionProperty] AS [QS_QuestionProperty]
        ON [QS_QuestionStem].Id=[QS_QuestionProperty].[QuestionStemCode]
        INNER JOIN [EL_QuestionBank].[QuestionCategory] AS [QuestionCategory]
        ON [QuestionCategory].Id=[QS_QuestionProperty].SubjectCode
        WHERE [QuestionCategory].Id=@CategoryIds OR charindex(@CategoryIds,[QuestionCategory].ParentIds )>0
--        GROUP BY [QS_QuestionStem].Id,[QS_QuestionStem].QuestionFaceCode
) select * from tempGR  where ReqIndex between 1 and 100

--
--SELECT COUNT(*) FROM [EL_QuestionBank].[QS_QuestionStem] AS [QS_QuestionStem]
--        INNER JOIN [EL_QuestionBank].[QS_QuestionProperty] AS [QS_QuestionProperty]
--        ON [QS_QuestionStem].Id=[QS_QuestionProperty].[QuestionStemCode]
--        INNER JOIN [EL_QuestionBank].[QuestionCategory] AS [QuestionCategory]
--        ON [QuestionCategory].Id=[QS_QuestionProperty].SubjectCode
--        WHERE [QuestionCategory].Id=@CategoryIds OR charindex(@CategoryIds,[QuestionCategory].ParentIds )>0
--        AND [QS_QuestionStem].QuestionFaceCode IS NULL
--   

--SELECT ID FROM [EL_QuestionBank].[QS_QuestionStem] WHERE [QS_QuestionStem].QuestionFaceCode IS null

--SELECT TOP 1 * FROM [EL_QuestionBank].[QS_QuestionFace]

4:错误?

我们发现第三步中的 ReqCount 是错误的,那应该如何才是正确的?

要实现它?级联一个 with 字句吧:

DECLARE         @CategoryIds varchar(max)='5315f8616e174094ac7251f2e3c4d584';                --分类ID
--DECLARE         @CategoryIds varchar(max)='1';                --分类ID
DECLARE         @PageNumber int=1;                        --页码
DECLARE         @PageSize int=20;                            --页大小
DECLARE         @Fettle int=1;                        --冻结状态
DECLARE         @RecieveState int=2;                    --接收状态:0共享的所有数据;1:未接收;2:已接受
DECLARE         @RecieveStateConstraint bit=NULL;            --约束接收状态(如果为真,则严格按照此值进行过滤)
DECLARE         @AuditState int =null;                    --审核状态
DECLARE         @AuditStateCustom int=null;                --审核状态:2:已审核;小于2:未开始、审核中
DECLARE         @Total int=0;                        --输出参数,总条数

--SELECT * FROM EL_QuestionBank.QuestionCategory
--with tempGR as( select row_number() over( order by A.Id) as ReqIndex ,COUNT(A.Id) OVER() as ReqCount , A.*
--                    from EL_CourseMaker.Course A where CATEGORYID = '1' )
--select * from tempGR where ReqIndex between -99 and 0 order by name
with tempGR as(
--    SELECT COUNT(*) FROM
--    (
        SELECT
            DISTINCT(
                CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id + 'XXXX'
                    WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode + 'YYYY'
                END) AS XId,
            DENSE_RANK() OVER (
                ORDER By (
                    CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Id
                        WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN [QS_QuestionStem].QuestionFaceCode
                    END)) AS ReqIndex,
            [QS_QuestionProperty].Difficult AS Difficult,
            (CASE WHEN [QS_QuestionStem].QuestionFaceCode IS NULL THEN [QS_QuestionStem].Content
                WHEN [QS_QuestionStem].QuestionFaceCode IS NOT NULL THEN(SELECT CONTENT FROM [EL_QuestionBank].[QS_QuestionFace] WHERE ID= [QS_QuestionStem].QuestionFaceCode)
            END) AS Content
            FROM [EL_QuestionBank].[QS_QuestionStem] AS [QS_QuestionStem]
            INNER JOIN [EL_QuestionBank].[QS_QuestionProperty] AS [QS_QuestionProperty]
            ON [QS_QuestionStem].Id=[QS_QuestionProperty].[QuestionStemCode]
            INNER JOIN [EL_QuestionBank].[QuestionCategory] AS [QuestionCategory]
            ON [QuestionCategory].Id=[QS_QuestionProperty].SubjectCode
            WHERE [QuestionCategory].Id=@CategoryIds OR charindex(@CategoryIds,[QuestionCategory].ParentIds )>0
--    )
),MAXGR AS(
    SELECT *, count(xid) over() as x FROM TEMPGR
)select * from MAXGR

COUNT DISTINCT ROW_NUMBER DENSE_RANK 以及对COUNT去重(非PARTITION)的更多相关文章

  1. count distinct 多个字段 或者 count(*) 统计group by 结果

    SELECT COUNT(*) FROM( SELECT 列名 FROM 表名 where ( 条件 )GROUP BY 多字段)临时表名 例如: SELECT COUNT(*) FROM(SELEC ...

  2. 【hive】count() count(if) count(distinct if) sum(if)的区别

    表名: user_active_day (用户日活表) 表内容: user_id(用户id)   user_is_new(是否新用户 1:新增用户 0:老用户) location_city(用户所在地 ...

  3. count(distinct) 与group by 浅析

    x在传统关系型数据库中,group by与count(distinct)都是很常见的操作.count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都 ...

  4. 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)

    [优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ...

  5. mysql count distinct 统计结果去重

    1.使用distinct去重(适合查询整张表的总数)有多个学校+教师投稿,需要统计出作者的总数select count(author) as total from files每个作者都投稿很多,这里有 ...

  6. 关于MySQL count(distinct) 逻辑的一个bug【转】

    本文来自:http://dinglin.iteye.com/blog/1976026#comments 背景 客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用cou ...

  7. SQL server 中 COUNT DISTINCT 函数

    目的:统计去重后表中所有项总和. 直观想法: SELECT COUNT(DISTINCT *) FROM [tablename] 结果是:语法错误. 事实上,我们可以一同使用 DISTINCT 和 C ...

  8. spark 例子count(distinct 字段)

    spark 例子count(distinct 字段) 例子描述: 有个网站访问日志,有4个字段:(用户id,用户名,访问次数,访问网站) 需要统计: 1.用户的访问总次数去重 2.用户一共访问了多少种 ...

  9. SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY)

    SQL Server 2005版本开始支持了窗口函数(Windowing Function)和OVER字句.SQL Server 2012版本开始支持了窗口函数的ORDER BY字句实现连续/累计聚合 ...

随机推荐

  1. Git(二)使用git管理文件版本(TortoiseGit )

    一.创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都 ...

  2. 7-11Zombie's Treasure Chest uva12325

    题意  你有一个体积为N的箱子和两种数量无限的宝物  宝物1的体积为s1 价值为v1   宝物2同理 输入均为32位带符号整数 你的任务是计算最多能带走多少价值的宝物 暴力枚举: 首先明白一点     ...

  3. 【Java】 大话数据结构(11) 查找算法(2)(二叉排序树/二叉搜索树)

    本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐 ...

  4. php 会话控制(禁用cookie后session为什么会失效?)

    首先说明一点:session不一定必须依赖cookie,只是php默认客户端sessionid基于cookie方式保存. 到此,我想你也应该了解了php默认的session客户端保存方式是基于cook ...

  5. Windows下安装Tensorflow(python3.6):记录过程

    安装前的情况: 之前使用的都是python2.7,但是tensorflow不支持2.x版本,那只有基于在3.x版本进行安装了 前段时间,我安装VS2017的时候安装了python3.6于是想在此基础上 ...

  6. 【*】单线程的redis为什么吞吐量可以这么大

    一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非 ...

  7. HDU 1402 A * B Problem Plus 快速傅里叶变换 FFT 多项式

    http://acm.hdu.edu.cn/showproblem.php?pid=1402 快速傅里叶变换优化的高精度乘法. https://blog.csdn.net/ggn_2015/artic ...

  8. LOJ.2863.[IOI2018]组合动作(交互)

    题目链接 通过两次可以先确定首字母.然后还剩下\(n-1\)位,之后每一位只有三种可能. 最简单的方法是每次确定一位,通过两次询问显然可以确定.但是只能一次询问. 首字母只会出现一次,即我们可以将串分 ...

  9. JAVA泛型中的有界类型(extends super)(转)

    JDK1.5中引入了泛型(Generic)机制.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...

  10. jtagger Versatile multiprogrammer for FPGAs, MCUs, etc.

    jtagger Versatile multiprogrammer for FPGAs, MCUs, etc. Well, it's not really just a jtagger, but I' ...