有多个专栏中,我有以下查询:如何使用DISTINCT,当我在SQL Server
select carBrand, carYear, carModel from cars;
我要的是只得到不同的车名。
我写了这个,但它不是我想要的。
select DISTINCT carBrand, carYear, carModel from Cars;
我该如何解决这个问题?
有多个专栏中,我有以下查询:如何使用DISTINCT,当我在SQL Server
select carBrand, carYear, carModel from cars;
我要的是只得到不同的车名。
我写了这个,但它不是我想要的。
select DISTINCT carBrand, carYear, carModel from Cars;
我该如何解决这个问题?
尝试
SELECT carBrand , carYear ,carModel
FROM Cars
GROUP BY carBrand , carYear ,carModel;
DISTINCT在整行上工作,而不是特定列。如果您想获取唯一名称,请只选择该列。
SELECT DISTINCT carBrand FROM Cars
这取决于你想要什么。例如,如果你想“丰田花冠”和“丰田佳美”,却忽视了一年,那么你可以这样做:
SELECT DISTINCT carBrand + ' ' + carModel AS carName
FROM Cars;
没有试图挑剔或者是一个混蛋,因为SQL并不是我花费的时间太多,但我一直认为只在单个列上获得“DISTINCT”是非常简单的,但是我偶然发现了这一点页,因为我只从'SELECT distinct distinct id from tablename'中获得了20条记录,而从'SELECT distinct id,pid from tablename'获得了1000条记录' – 2016-06-09 21:49:49
'SELECT distinct id,pid from table'=='select distinct(id,pid )从表中可以看出,distinct关键字作为所有列名的组合。它有秘密的括号包裹所有的列。可能会混淆人们 – 2017-11-30 15:36:06
我不知道为什么,接受的答案已被接受,当然不明白为什么它已被upvoted但OP有以下问题:
我写了这个,但它不是我想要的。
select DISTINCT carBrand, carYear, carModel from Cars;
接受的答案已经建议使用:
SELECT carBrand , carYear ,carModel
FROM Cars
GROUP BY carBrand , carYear ,carModel;
返回完全相同的结果作为OP的查询。实际上,答案中的建议(使用组)甚至不鼓励用于获得不同的结果,但应该用于聚合。有关更多信息,请参阅this回答。
另外,SQL Server足够聪明,可以理解如果查询中没有聚合函数,那么查询实际上是要求distinct
,所以它会在底层使用distinct
。
Distinct将在@MarkByers在他的答案中指出的整行上做一个独特的划分。
对于那些想测试上述内容的人来说,这里是一个脚本,它将创建一个包含3列的表格,然后用数据填充它。两者(distinct
和group by
)都将返回相同的结果集。
CREATE TABLE [dbo].[Cars](
[carBrand] [varchar](50) NULL,
[carYear] [int] NULL,
[carModel] [varchar](50) NULL
)
go;
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '328 i');
insert into Cars values('BMW', 2000, '3M');
两个查询将返回这个结果:
结论
如果你想不同的记录中没有使用group by
。使用distinct
。当您使用聚合函数时,请使用group by
,例如SUM
,COUNT
等
汽车名称是在哪个字段? – Randy 2012-04-08 20:21:44
在我的SqlServer中,“选择DISTINCT carBrand,carYear,carModel from Cars;”完美的工作 – Gamby 2017-11-29 10:45:19