COUNT DISTINCT ROW_NUMBER DENSE_RANK 以及对COUNT去重(非PARTITION)
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 namewith 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)的更多相关文章
- count distinct 多个字段 或者 count(*) 统计group by 结果
SELECT COUNT(*) FROM( SELECT 列名 FROM 表名 where ( 条件 )GROUP BY 多字段)临时表名 例如: SELECT COUNT(*) FROM(SELEC ...
- 【hive】count() count(if) count(distinct if) sum(if)的区别
表名: user_active_day (用户日活表) 表内容: user_id(用户id) user_is_new(是否新用户 1:新增用户 0:老用户) location_city(用户所在地 ...
- count(distinct) 与group by 浅析
x在传统关系型数据库中,group by与count(distinct)都是很常见的操作.count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都 ...
- 【优化】COUNT(1)、COUNT(*)、COUNT(常量)、COUNT(主键)、COUNT(ROWID)、COUNT(非空列)、COUNT(允许为空列)、COUNT(DISTINCT 列名)
[优化]COUNT(1).COUNT(*).COUNT(常量).COUNT(主键).COUNT(ROWID).COUNT(非空列).COUNT(允许为空列).COUNT(DISTINCT 列名) 1. ...
- mysql count distinct 统计结果去重
1.使用distinct去重(适合查询整张表的总数)有多个学校+教师投稿,需要统计出作者的总数select count(author) as total from files每个作者都投稿很多,这里有 ...
- 关于MySQL count(distinct) 逻辑的一个bug【转】
本文来自:http://dinglin.iteye.com/blog/1976026#comments 背景 客户报告了一个count(distinct)语句返回结果错误,实际结果存在值,但是用cou ...
- SQL server 中 COUNT DISTINCT 函数
目的:统计去重后表中所有项总和. 直观想法: SELECT COUNT(DISTINCT *) FROM [tablename] 结果是:语法错误. 事实上,我们可以一同使用 DISTINCT 和 C ...
- spark 例子count(distinct 字段)
spark 例子count(distinct 字段) 例子描述: 有个网站访问日志,有4个字段:(用户id,用户名,访问次数,访问网站) 需要统计: 1.用户的访问总次数去重 2.用户一共访问了多少种 ...
- SQL Server ->> 间接实现COUNT(DISTINCT XXX) OVER(PARTITION BY YYY)
SQL Server 2005版本开始支持了窗口函数(Windowing Function)和OVER字句.SQL Server 2012版本开始支持了窗口函数的ORDER BY字句实现连续/累计聚合 ...
随机推荐
- vue报错 ModuleBuildError: Module build failed: Error: `sass-loader` requires `node-sass` >=4. Please install a compatible version.
解决方法: 输入命令:cnpm install node-sass@latest
- win10无线网连接 提示无法连接到此网络
一.Win10无法连接此网络是怎么回事 对于大多数遇到无法连接此网络问题的,主要是Win10笔记本电脑用户,使用的是无线网络.而出现Win10连接其他无线网络正常,但是就是某个无线网络无法正常连接的时 ...
- thinkphp中order方法
order方法属于模型的连贯操作方法之一,用于对操作的结果排序. 用法 $Model->where('status=1')->order('id desc')->limit(5)-& ...
- fpm 制作rpm包
使用fpm命令制作rpm包并安装 工作中有如下情况需要将文件打包rpm: 避免重复工作,将源码程序打包为rpm 使用yum发布项目,项目打包为rpm 将自己写好的程序打包为rpm,提供给用户下载 其他 ...
- catalan数的新理解
catalan数的新理解h[5]==h[4][0]+h[3][1]+h[2][2]+h[1][3]+h[0][4];对于这种递推式就是catalan数
- Python3 k-邻近算法(KNN)
# -*- coding: utf-8 -*- """ Created on Fri Dec 29 13:13:44 2017 @author: markli " ...
- 探索Java的日志世界
探索Java的日志世界 本文的思维导图 一.主题 打开日志的大门,探索的Java日志世界 二.目标 了解常用的日志框架 掌握日志框架的选择和使用以及开发规范 了解日志框架中的一些设计思想 三.内容 1 ...
- 简单实现一个EventEmiter
在前端开发中,“发布-订阅”也是“观察者模式”是一种常用的设计模式:之前对设计模式没有过深的认识,直到前段时间在封装一个运用AngularJS封装table组件时,遇到一个难题,那就是AngularJ ...
- InnoDB的锁机制浅析(四)—不同SQL的加锁状况
不同SQL的加锁状况 文章总共分为五个部分: InnoDB的锁机制浅析(一)-基本概念/兼容矩阵 InnoDB的锁机制浅析(二)-探索InnoDB中的锁(Record锁/Gap锁/Next-key锁/ ...
- SCTF2018-Event easiest web - phpmyadmin
6月19日的SCTF的web送分题. 打开链接是一个phpmyadmin的登陆界面,尝试用默认账号:root 密码:root登陆 于是直接进去了,首先看下数据库,除了些初始化的库以外,abc这个库比 ...