Sql 我应该在查询中何时使用distinct?

Sql 我应该在查询中何时使用distinct?,sql,distinct,Sql,Distinct,这是一个一般性问题: 有没有人告诉我如何知道何时应该在查询中使用distinct?我正在努力理解什么时候确切地使用它。我倾向于在我不需要的时候使用它,而不是在我需要的时候 非常感谢大家。基本上,没有什么理由使用select distinct,尽管它有时很方便 如果可以避免,就要避免!SQL在删除重复项时会产生开销,即使没有重复项。因此,select distinct比select慢 通常使用group by编写select distinct更合适,因为您通常希望聚合某些列,例如最大日期/时间 这

这是一个一般性问题: 有没有人告诉我如何知道何时应该在查询中使用distinct?我正在努力理解什么时候确切地使用它。我倾向于在我不需要的时候使用它,而不是在我需要的时候


非常感谢大家。

基本上,没有什么理由使用select distinct,尽管它有时很方便

如果可以避免,就要避免!SQL在删除重复项时会产生开销,即使没有重复项。因此,select distinct比select慢

通常使用group by编写select distinct更合适,因为您通常希望聚合某些列,例如最大日期/时间


这就是说,它可以是方便的速记,所以不应该完全避免,只是很少使用。

关于何时使用DISTINCT没有一般规则,它是基于您的要求,即当您在一列中有两个相同的值,但您只需要一个值,所以您将使用DISTINCT

假设你有一个城市中银行和分行的列表。但你需要知道有多少独特的银行在这个城市经营,然后你会写

select distinct bank_name from city;

当我希望确保查询中的行不重复时,我会使用distinct,因为我选择的字段组合可能有重复的记录。通常,这是在选择一组不包含主键/唯一键且所选字段组合在一起时不保证唯一的列时发生的

例如,如果我选择今年购买的客户发送信函给,并且客户在一年内可以有多个订单,并且我希望确保每个人和地址只发送一封信函,我将使用Distinct确保每个唯一的客户名称/地址组合出现一次

--could return multiple records for repeat customers if Distinct was not present
Select Distinct BillingName, BillingAddress 
from Orders 
where OrderDate > '2019-08-01'

如果我有一个员工表,其中包含员工姓名和地址的列街道、城市、州/普罗旺斯、国家,您知道从员工选择国家和从员工选择不同国家的区别吗?如果我想知道我的员工代表了多少不同的国家,该怎么办?第一个查询将对同一个国家进行多次计数?是的。它将从每一行中选择,即显示国家/地区列。第二个查询不会显示重复项,因此,如果我有来自7个不同国家的100名员工,则只会显示7行。选择countdistinct Country from Employee将返回7。该表的名称为city,它描述了银行和分行?这不是一个很好的例子。如果你有一个银行表格,上面描述了各种银行及其分支机构的地址,会怎么样?然后从bank_表中选择不同的bank_名称,其中city='Oshkosh'