SQLServer中使用DISTINCT的大小写问题
SQLServer中使用DISTINCT的大小写问题
SQL Server为你提供了在你的数据库中存储混合大小写数据的能力,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视大小写。
你可能面对的一个问题是你想从一个表获得只包含不同值的列表,来显示你的表中不同,但是如果你的数据库是按照不区分大小写来建立的,那么DISTINCT条件语句不会显示这些不同,它只会将所有的值放在一起。
所以在这方面有什么选择吗?
为了说明这个动作,我们将使用一个区分大小写和一个不区分大小写的数据库来看看它工作的两种方式。
第一组查询使用了AdventureWorks数据库,它被配置为区分大小写。
为了得到从你的数据库而来的集合,你可以运行这个查询:
SELECT name, collation_name
FROM master.sys.databases
我们将查询AdventureWorks数据库中的Preson.Contact的数据。
所有的数据都是作为混合大小写来建立的,所以当我们运行这个查询的时候我们没有得到重复的值。
SELECT DISTINCT 10 FirstName
FROM Person.Contact
WHERE FirstName LIKE 'A%'
ORDER BY 1
如果你更新一条记录并将FirstName从“Adam”改为“ADAM”,那么当运行这个查询时我们会获得两个不同的值。
UPDATE Person.Contact
SET FirstName = 'ADAM'
WHERE ContactID = 62
GO
SELECT DISTINCT 10 FirstName
FROM Person.Contact
WHERE FirstName LIKE 'A%'
ORDER BY 1
正如你看到的,现在“Adam”和“ADAM”作为不同的值来显示。
下一步我们将要做的是在一个不区分大小写的数据库中创建一个新表然后从Person.Contact加载所有的数据到这个新表中。
CREATE TABLE Test.dbo.contact (FirstName nvarchar(50))
GO
INSERT INTO Test.dbo.contact
SELECT FirstName FROM Person.Contact
GO
SELECT DISTINCT 10 FirstName
FROM Test.dbo.contact
WHERE FirstName LIKE 'A%'
ORDER BY 1
GO
当我们运行SELECT查询时你可以看到输出将“Adam”和“ADAM”结合起来,因为不区分大小写。
为了解决这个问题我们可以将这个查询按照下面的方式修改使得这个收集在FirstName 字段上区分大小写。
SELECT DISTINCT 10 FirstName COLLATE sql_latin1_general_cp1_cs_as
FROM Test.dbo.contact
WHERE FirstName LIKE 'A%'
ORDER BY 1
当这个运行时,我们看到了值“Adam”和“ADAM”。
所以根据你的数据库是怎样建立的,你将能够或不能看到这个不同。
为了给你显示另一个例子,下面是一个快速选择区分大小写或不区分大小写选项的方法。
我们运行的第一个查询是使用区分大小写,所以四条记录都将显示出来。
select distinct (item) COLLATE sql_latin1_general_cp1_cs_as
FROM (
select 'abcd' item
union all select 'ABCD'
union all select 'defg'
union all select 'deFg') items
第二个查询中不同的是收集的名称。
当这个查询使用不区分大小写时,我们只获得两条记录。
select distinct (item) COLLATE sql_latin1_general_cp1_ci_ai
FROM (
select 'abcd' item
union all select 'ABCD'
union all select 'defg'
union all select 'deFg') items
【。
sqlserver删除重复数据方法
sqlserver删除重复数据方法在SQL Server中,删除重复数据是一项非常常见且重要的操作。
重复数据会占用数据库存储空间,并且会降低数据库性能。
因此,及时删除重复数据可以保证数据质量和数据库的良好运行。
那么,SQL Server中删除重复数据的方法有哪些呢?1.使用DISTINCT关键字DISTINCT关键字可以用来去除重复的行,从而保留一行数据。
可以使用SELECT DISTINCT语句来把所有字段值都唯一化,然后再把数据插回到原表中。
例如:```SELECT DISTINCT * INTO new_table FROM old_tableDROP TABLE old_tableEXEC sp_rename 'new_table', 'old_table'```这个方法简单易懂,但是会将数据复制到新表中,因此对效率和空间的利用不够高效。
2.使用ROW_NUMBER()函数ROW_NUMBER()函数可以为每一行数据分配一个唯一的行号。
结合CTE子句可以删除相同数据中的冗余行。
例如:```WITH DeDup AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY [col1], [col2],... ORDER BY [col1]) AS RowNumberFROM MyTable)DELETE FROM DeDup WHERE RowNumber > 1```这种方式需要注意的是,需要在PARTITION BY中指定需要去重的字段。
否则所有数据行将都被视为重复行而被删除。
此外,该方法也涉及数据复制,效率和空间利用都不够优秀。
3.使用GROUP BY和HAVING子句GROUP BY被用来根据一个或多个字段对结果进行分组汇总,HAVING子句则用于过滤分组后的结果。
将GROUP BY和HAVING子句结合使用,可以快速去除重复的数据。
sqlserver练习题及答案学习资料
SQL SERVER练习题及答案题目1:问题描述:为管理岗位业务培训信息,建立3个表:S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄C (C#,CN ) C#,CN 分别代表课程编号、课程名称SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩1. 使用标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名--实现代码:SELECT SN,SD FROM SWHERE [S#] IN(SELECT [S#] FROM C,SCWHERE C.[C#]=SC.[C#]AND CN=N\'税收基础\')的学员姓名和所属单位2. 使用标准SQL嵌套语句查询选修课程编号为’C2’--实现代码:SELECT S.SN,S.SD FROM S,SCWHERE S.[S#]=SC.[S#]AND SC.[C#]=\'C2\'的学员姓名和所属单位3. 使用标准SQL嵌套语句查询不选修课程编号为’C5’--实现代码:SELECT SN,SD FROM SWHERE [S#] NOT IN(SELECT [S#] FROM SCWHERE [C#]=\'C5\')4. 使用标准SQL嵌套语句查询选修全部课程的学员姓名和所属单位--实现代码:SELECT SN,SD FROM SWHERE [S#] IN(SELECT [S#] FROM SCRIGHT JOINC ON SC.[C#]=C.[C#] GROUP BY [S#]HAVING COUNT(*)=COUNT([S#]))5. 查询选修了课程的学员人数--实现代码:SELECT 学员人数=COUNT(DISTINCT [S#]) FROM SC6. 查询选修课程超过5门的学员学号和所属单位--实现代码:SELECT SN,SD FROM SWHERE [S#] IN(SELECT [S#] FROM SCGROUP BY [S#]HAVING COUNT(DISTINCT [C#])>5)题目2问题描述:本题用到下面三个关系表:CARD 借书卡。
sql查询区分大小写
sql查询区分大小写1.--区分大小写select * from a where a=’AbCdE’ collate Chinese_PRC_CS_AI--区分大小写select * from a where a=’abCdE’ collate Chinese_PRC_CI_AI--不区分大小写2.如果想让服务器上所有的存储表都区分大小写就需要在安装服务器时设置服务器的排序规则或者运行alter database testgrass collate Chinese_PRC_CS_AI3.如果修改整个服务器的默认排序规则,用Rebuildm.exe重建master库SQL Server\\80\\Tools\\Binn\\rebuildm.exe4.或者图解1).先打开oblog数据库的oblog_user表,右键点击,选设计表2).找到username字段3).然后找到下面的排序规则4).在弹出的对话框中选择区分大小写参考:我们在create table时经常会碰到这样的语句,例如:password nvarchar(10)collate chinese_prc_ci_as null,那它到底是什么意思呢?不妨看看下面:首先,collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。
语法是:collate collation_namecollation_name ::={windows_collation_name}|{sql_collation_name}参数collate_name是应用于表达式、列定义或数据库定义的排序规则的名称。
collation_name 可以只是指定的Windows_collation_name 或SQL_collation_name。
Windows_collation_name 是Windows 排序规则的排序规则名称。
sql server 中文排序规则
SQL Server 中文排序规则在数据库管理中,排序规则(Collation)是一个非常重要的概念,它定义了数据库中字符数据的比较和排序方式。
在处理中文数据时,正确选择和使用排序规则尤为重要,因为它直接影响到数据的检索、排序和比较结果的准确性。
一、SQL Server 中的排序规则SQL Server 支持多种排序规则,其中包括针对中文语言的排序规则。
这些规则基于不同的字符集和排序算法,可根据实际需要进行选择。
例如,有些排序规则区分大小写,有些则不区分;有些规则按照拼音排序,有些则按照笔画数排序。
二、中文排序规则的选择1. 区分大小写:根据需要选择是否区分大小写的排序规则。
对于大多数中文应用场景,通常不需要区分大小写。
2. 拼音排序:如果需要按照拼音对中文数据进行排序,可以选择相应的拼音排序规则。
3. 笔画数排序:如果希望按照汉字的笔画数进行排序,可以选择笔画数排序规则。
4. 自定义排序:SQL Server 还支持自定义排序规则,以满足特殊需求。
三、设置和使用中文排序规则在 SQL Server 中,可以在创建数据库或表时指定排序规则,也可以在查询时临时改变排序规则。
以下是一些示例:1. 创建数据库时指定排序规则:```sqlCREATE DATABASE MyDatabaseCOLLATE Chinese_PRC_CI_AS; -- 使用中文简体不区分大小写的排序规则```2. 创建表时指定列级排序规则:```sqlCREATE TABLE MyTable(Name NVARCHAR(100) COLLATE Chinese_PRC_Stroke_Order_CS_AS -- 使用中文简体按笔画数区分大小写的排序规则);```3. 查询时临时改变排序规则:```sqlSELECT * FROM MyTableORDER BY Name COLLATE Chinese_PRC_Pinyin_Order_CI_AS; -- 按拼音不区分大小写排序```四、注意事项1. 不同排序规则可能影响查询性能,因此应根据实际需求和性能测试结果选择合适的排序规则。
SQLSERVER2008实用教程实验参考答案(实验4)
SQLSERVER2008实用教程实验参考答案(实验4)实验4 数据库的查询和视图一、SELECT语句的基本使用1. 查询Employees表中所有数据2. 查询Employees表中指定字段数据3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话查询月收入高于2000元的员工号码查询1970年以后出生的员工的姓名和住址5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
7. 使用SELECT语句进行简单计算计算每个雇员的实际收入8. 使用内置函数获得员工总数计算Salary表中员工月收入的平均数获得Employees表中最大的员工号码计算Salary表中所有员工的总支出查询财务部雇员的最高和最低实际收入9. 模糊查询找出所有姓王的雇员的部门号找出所有地址中含有“中山”的雇员的号码及部门号找出员工号码中倒数第二个数字为0的员工的姓名、地址和学历10. Between…And…和Or的使用找出收入在2000~3000元之间的雇员编号找出部门为“1”或“2”的雇员的编号11. 使用INTO子句,由源表创建新表由表Salary创建“SalaryNew”表,要求包括编号和收入,选择收入在1500元以上的雇员由表Employees创建“EmployeesNew”表,要求包括编号和姓名,选择所有男员工二、子查询的使用1. 查找在财务部工作的雇员情况2. 用子查询的方法查找所有收入在2500以下的雇员的情况3. 查找财务部年龄不低于研发部雇员年龄的雇员姓名4. 用子查询的方法查找研发部比所有财务部雇员收入都高的雇员的姓名5. 查找比所有财务部的雇员收入都高的雇员的姓名6. 用子查询的方法查找所有年龄比研发部雇员年龄都大的雇员的姓名三、连接查询的使用1. 查询每个雇员的情况及薪水的情况2. 查询每个雇员的情况及其工作部门的情况3. 使用内连接的方法查询名字为“王林”的雇员所在的部门4. 使用内连接的方法查找出不在财务部工作的所有雇员信息5. 使用外连接方法查找出所有员工的月收入6. 查找财务部收入在2000元以上的雇员姓名及其薪水详情7. 查询研发部在1976年以前出生的雇员姓名及其薪水详请四、聚合函数的使用1. 求财务部雇员的平均收入2. 查询财务部雇员的最高和最低收入3. 求财务部雇员的平均实际收入4. 查询财务部雇员的最高和最低实际收入5. 求财务部雇员的总人数6. 统计财务部收入在2500元以上的雇员人数五、GROUP BY、ORDER BY子句的使用1. 查找Employees表中男性和女性的人数2. 按部门列出在该部门工作的员工的人数3. 按员工的学历分组,排列出本科、大专、硕士的人数4. 查找员工数超过2的部门名称和雇员数量5. 按员工的工作年份分组,统计各个工作年份的人数,例如工作1年的多少人,工作2年的多少人6. 将雇员的情况按收入由低到高排列7. 将员工信息按出生时间从小到大排列8. 在ORDER BY 子句中使用子查询,查询员工姓名、性别和工龄信息,要求按实际收入从大到小排列六、视图的使用1. 创建视图(1)在数据库YGGL上创建视图Departments_View,视图包含Department表的全部列(2)创建视图Employees_Departments_View,视图包含员工号码、姓名、所在部门名称(3)创建视图Employees_Salary_View,视图包含员工号码、姓名和实际收入三列2. 查询视图从视图Employees_Salary_View中查询出姓名为“王林”的员工的实际收入3. 更新视图(1)向视图Departments_View中添加一条记录(‘6’,‘广告部’,‘广告业务’)执行完命令后,分别查看Departments_View和Department表中发生的变化(2)尝试向Employees_Departments_View中添加一条记录,看看会发生什么情况(3)尝试向Employees_Salary_View中添加一条记录,看看会发生什么情况(4)将视图Departments_View中,部门号为‘6’的部门名称修改为‘生产车间’(5)删除视图Departments_View中最新增加的的一条记录4. 删除视图Employees_Departments_View5. 在界面工具中操作视图一、SELECT语句的基本使用1. 查询Employees表中所有数据SELECT*FROM Employees;2. 查询Employees表中指定字段数据SELECT EmployeeID,Name,DepartmentID FROM Employees;3. 查询Employees表中的部门号和性别,要求使用Distinct消除重复行SELECT Distinct DepartmentID,Sex FROM Employees;4. 使用WHERE子句查询表中指定的数据查询编号为’000001’的雇员的地址和电话Select Address,PhoneNumber FROM Employees WHERE EmployeeID='000001';查询月收入高于2000元的员工号码SELECT EmployeeID FROM Salary WHERE InCome>2000;查询1970年以后出生的员工的姓名和住址SELECT Name,Address FROM Employees WHERE YEAR(Birthday)>'1970'; SELECT Name,Address FROM Employees WHERE Birthday>'1970';5. 使用AS子句为表中字段指定别名查询Employees表中女雇员的地址和电话,并将列标题显示为地址和电话SELECT Address AS地址,PhoneNumber AS电话FROM Employees;查询Employees表中男雇员的姓名和出生日期,并将列标题显示为姓名和出生日期SELECT Name AS姓名,Birthday AS出生日期FROM Employees WHERE Sex=1;6. 使用使用CASE子句查询Employees表中员工的姓名和性别,要求Sex值为1时显示“男”,为0时显示“女”SELECT Name AS姓名,CASEWHEN Sex=1 THEN'男'WHEN Sex=0 THEN'女'ENDAS性别FROM Employees;查询Employees表中员工的姓名、住址和收入水平,2000元以下显示为低收入,2000~3000地显示为中等收入,3000元以上显示为高收入。
mysql中distinct用法
mysql中distinct用法在表中,可能会包含重复值。
这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。
关键词distinct用于返回唯一不同的值。
表a:表中b:selectdistinctnamefroma继续执行后结果如下:示例2.1selectdistinctname,idfroma执行后结果如下:实际上就是根据name和id两个字段去回去轻的,这种方式access和sqlserver同时积极支持。
示例2.2selectdistinctxing,mingfromb返回如下结果:回到的结果为两行,这表明distinct并非就是对xing和ming两列“字符串堆叠”后再回去轻的,而是分别促进作用于了xing和ming列。
selectcount(distinctname)froma;--表中name去重后的数目,sqlserver支持,而access不支持count就是无法统计数据多个字段的,下面的sql在sqlserver和access中都无法运转。
selectcount(distinctname,id)froma;若想采用,恳请采用嵌套查阅,如下:selectcount(*)from(selectdistinctxing,namefromb)asm;selectid,distinctnamefroma;--可以提示信息错误,因为distinct必须放到结尾distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。
例如,假如表a有“备注”列,如果想获取distincname,以及对应的“备注”字段,想直接通过distinct是不可能实现的。
但可以通过其他方法实现关于sqlserver 将一列的多行内容拼接成一行的问题讨论。
SqlServer查询大写字母
SqlServer查询大写字母--1.查大写字母select * from 表where 字段collate Chinese_PRC_CS_AS_WS like '%A%' --就是在字段名后加collate Chinese_PRC_CS_AS_WS--2.查全角select * from 表where 字段collate Chinese_PRC_CS_AS_WS like '%A%' --3.查半角select * from 表where 字段collate Chinese_PRC_CS_AS_WS like '%,%' --4.查以大写字母开头的字段Select * from 表where ASCII(SUBSTRING(字段,1,1)) between 65 and 90--5.查以小写字母开头的字段Select * from 表where ASCII(SUBSTRING(字段,1,1)) between 97 and 122 26个大写字母对应的ASCII编码selectASCII('A')as A,ASCII('B')as B,ASCII('C')as C, ASCII('D')as D,ASCII('E')as E,ASCII('F')as F, ASCII('G')as G,ASCII('H')as H,ASCII('I')as I, ASCII('J')as J,ASCII('K')as K,ASCII('L')as L, ASCII('M')as M,ASCII('N')as N,ASCII('O')as O, ASCII('P')as P,ASCII('Q')as Q,ASCII('R')as R, ASCII('S')as S,ASCII('T')as T,ASCII('U')as U, ASCII('V')as V,ASCII('W')as W,ASCII('X')as X, ASCII('Y')as Y,ASCII('Z')as Z;26个小写字母对应的ASCII编码selectASCII('a')as a,ASCII('b')as b,ASCII('c')as c, ASCII('d')as d,ASCII('e')as e,ASCII('f')as f, ASCII('g')as g,ASCII('h')as h,ASCII('i')as i, ASCII('j')as j,ASCII('k')as k,ASCII('l')as l, ASCII('m')as m,ASCII('n')as n,ASCII('o')as o, ASCII('p')as p,ASCII('q')as q,ASCII('r')as r, ASCII('s')as s,ASCII('t')as t,ASCII('u')as u, ASCII('v')as v,ASCII('w')as w,ASCII('x')as x, ASCII('y')as y,ASCII('z')as z;。
sqlserver distinct用法
sqlserver distinct用法标题:SQL Server DISTINCT 用法详解:从基础到高级应用摘要:本文将详细介绍SQL Server 中DISTINCT 关键字的用法。
从基础的概念开始,逐步深入讨论DISTINCT 在SQL 查询中的应用,包括单列DISTINCT、多列DISTINCT、DISTINCT 搭配聚合函数、DISTINCT 和SELECT 子句等功能。
我们还将讨论DISTINCT 运行效率和最佳实践。
无论您是初学者还是有经验的数据库开发人员,本文都将为您提供宝贵的知识和指导。
目录:1. 引言1.1 SQL Server 简介1.2 DISTINCT 的作用2. 单列DISTINCT2.1 基本语法2.2 示例及解析3. 多列DISTINCT3.1 基本语法3.2 示例及解析4. DISTINCT 搭配聚合函数4.1 基本语法4.2 示例及解析5. DISTINCT 和SELECT 子句5.1 基本语法5.2 示例及解析6. DISTINCT 运行效率与最佳实践6.1 索引的影响6.2 数据量的影响6.3 使用临时表进行优化6.4 如何评估DISTINCT 查询的性能7. 结论7.1 总结7.2 推荐资源1. 引言:1.1 SQL Server 简介SQL Server 是由微软公司开发的一种关系数据库管理系统(RDBMS),广泛应用于企业级应用程序的数据存储和管理。
它支持SQL(结构化查询语言)作为标准查询语言,用于对数据库进行查询、插入、更新和删除等操作。
1.2 DISTINCT 的作用DISTINCT 是SQL 查询语句中的关键字,用于去重查询结果集中的重复行,返回唯一的值。
DISTINCT 用于SELECT 语句,它可以应用于单个列或多个列。
通过消除结果集中的重复值,DISTINCT 可以帮助我们更好地理解和分析数据。
2. 单列DISTINCT:2.1 基本语法:SELECT DISTINCT column_nameFROM table_name;2.2 示例及解析:假设我们有一个名为"Customers" 的表,其中包含名为"Country" 的列,我们想要获取不重复的国家列表。
SQLServer中使用DISTINCT的大小写问题
SQL Server为你提供了在你的数据库中存储混合⼤⼩写数据的能⼒,但是根据你怎样创建数据库,SQL Server将在你给出T-SQL命令时忽视⼤⼩写。
你可能⾯对的⼀个问题是你想从⼀个表获得只包含不同值的列表,来显⽰你的表中不同,但是如果你的数据库是按照不区分⼤⼩写来建⽴的,那么DISTINCT条件语句不会显⽰这些不同,它只会将所有的值放在⼀起。
所以在这⽅⾯有什么选择吗? 为了说明这个动作,我们将使⽤⼀个区分⼤⼩写和⼀个不区分⼤⼩写的数据库来看看它⼯作的两种⽅式。
第⼀组查询使⽤了AdventureWorks数据库,它被配置为区分⼤⼩写。
为了得到从你的数据库⽽来的集合,你可以运⾏这个查询: SELECT name, collation_name FROM master.sys.databases 我们将查询AdventureWorks数据库中的Preson.Contact的数据。
所有的数据都是作为混合⼤⼩写来建⽴的,所以当我们运⾏这个查询的时候我们没有得到重复的值。
SELECT DISTINCT 10 FirstName FROM Person.Contact WHERE FirstName LIKE 'A%' ORDER BY 1 如果你更新⼀条记录并将FirstName从“Adam”改为“ADAM”,那么当运⾏这个查询时我们会获得两个不同的值。
UPDATE Person.Contact SET FirstName = 'ADAM' WHERE ContactID = 62 GO SELECT DISTINCT 10 FirstName FROM Person.Contact WHERE FirstName LIKE 'A%' ORDER BY 1 正如你看到的,现在“Adam”和“ADAM”作为不同的值来显⽰。
下⼀步我们将要做的是在⼀个不区分⼤⼩写的数据库中创建⼀个新表然后从Person.Contact加载所有的数据到这个新表中。
distinct的sql用法
distinct的sql用法全文共四篇示例,供读者参考第一篇示例:在SQL中,DISTINCT是一种用法,用于返回结果集中唯一不同值的行。
当我们在查询数据库时,有时候我们只关注结果集中的唯一不同值,而不关心重复出现的值。
这时候我们就可以使用DISTINCT来过滤结果,只保留唯一的值。
在使用DISTINCT时,它会对指定的列进行去重操作,只保留不同的值。
它不会对整行数据进行去重,只会基于指定的列进行去重。
通常我们会将DISTINCT与SELECT语句一起使用,来获取结果集中唯一不同值的列。
我们想获取某个表中某一列的所有不同值,我们可以这样写:```SELECT DISTINCT column_nameFROM table_name;```这样就会返回该列中所有不同的值。
下面我们通过一个具体的例子来演示DISTINCT的用法,假设我们有一个学生表(student),它包含了学生的ID和姓名两列:```学生表(student)ID 姓名1 小明2 小红3 小刚4 小明5 小红```现在我们想获取该表中所有不同的学生姓名,我们可以这样写SQL语句:执行以上SQL语句后,将会返回不同的学生姓名,即"小明"、"小红"、"小刚",去掉重复的"小明"和"小红"。
除了在SELECT语句中使用DISTINCT外,我们还可以在GROUP BY语句中使用DISTINCT。
我们想要根据某一列对表中数据进行分组,并统计每组的数量,但是我们只关心每组的不同值。
这时我们可以先根据该列进行分组,然后使用DISTINCT对该列进行去重。
我们想统计每个班级的学生人数,可以这样写:```SELECT 班级, COUNT(DISTINCT 学生ID) as 人数FROM studentGROUP BY 班级;```在以上例子中,我们先按照班级对学生表进行分组,然后再对学生ID进行去重,最后统计每个班级的学生人数。
