首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何(或能否)在多个列上选择DISTINCT?

如何(或能否)在多个列上选择DISTINCT?
EN

Stack Overflow用户
提问于 2008-09-10 15:33:11
回答 3查看 1M关注 0票数 488

我需要从一个表中检索所有行,其中2列组合在一起都是不同的。所以我想要所有的销售,没有任何其他销售发生在同一天,以相同的价格。基于日期和价格的唯一销售将更新为活动状态。

所以我在想:

UPDATE sales
SET status = 'ACTIVE'
WHERE id IN (SELECT DISTINCT (saleprice, saledate), id, count(id)
             FROM sales
             HAVING count = 1)

但我的脑部受伤了,走得更远。

EN

回答 3

Stack Overflow用户

发布于 2008-09-10 16:17:14

查询的问题在于,在使用GROUP BY子句(实际上是使用distinct)时,只能使用group by或聚合函数的列。您不能使用列id,因为可能存在不同的值。在您的例子中,由于HAVING子句的原因,总是只有一个值,但大多数RDBMS不够聪明,无法识别这一点。

然而,这应该可以工作(并且不需要连接):

UPDATE sales
SET status='ACTIVE'
WHERE id IN (
  SELECT MIN(id) FROM sales
  GROUP BY saleprice, saledate
  HAVING COUNT(id) = 1
)

您也可以使用MAX或AVG而不是MIN,只有当只有一个匹配的行时,使用返回列的值的函数才很重要。

票数 27
EN

Stack Overflow用户

发布于 2018-01-13 15:56:09

我想从“GrondOfLucht”列中选择不同的值,但它们应该按照“排序”列中给出的顺序进行排序。我不能只获得一列的不同值。

Select distinct GrondOfLucht,sortering
from CorWijzeVanAanleg
order by sortering

它还会给列‘排序’,因为'GrondOfLucht‘和’排序‘不是唯一的,所以结果将是所有行。

使用该组按排序给出的顺序选择'GrondOfLucht‘的记录

SELECT        GrondOfLucht
FROM            dbo.CorWijzeVanAanleg
GROUP BY GrondOfLucht, sortering
ORDER BY MIN(sortering)
票数 2
EN

Stack Overflow用户

发布于 2019-01-31 16:52:10

如果您的DBMS不支持具有多列的distinct,如下所示:

select distinct(col1, col2) from table

通常可以安全地执行多选操作,如下所示:

select distinct * from (select col1, col2 from table ) as x

因为这可以在大多数DBMS上工作,并且预计这将比group by解决方案更快,因为您避免了分组功能。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档