首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在多个列上计算DISTINCT

在多个列上计算DISTINCT
EN

Stack Overflow用户
提问于 2009-09-24 20:03:51
回答 16查看 555.5K关注 0票数 264

有没有更好的方法来执行这样的查询:

SELECT COUNT(*) 
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
      FROM DocumentOutputItems) AS internalQuery

我需要计算这个表中的不同项的数量,但是distinct超过两列。

我的查询运行良好,但我想知道是否可以使用一个查询(不使用子查询)获得最终结果

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-09-26 03:42:35

如果您试图提高性能,可以尝试在两列的哈希值或连接值上创建持久化计算列。

持久化后,如果列是确定性的,并且您使用的是“合理的”数据库设置,则可以对其进行索引和/或在其上创建统计信息。

我相信计算列的distinct计数将等同于您的查询。

票数 87
EN

Stack Overflow用户

发布于 2016-07-29 04:21:27

要作为单个查询运行,请连接列,然后获取连接字符串的实例的不同计数。

SELECT count(DISTINCT concat(DocumentId, DocumentSessionId)) FROM DocumentOutputItems;

在MySQL中,您可以在没有连接步骤的情况下执行相同的操作,如下所示:

SELECT count(DISTINCT DocumentId, DocumentSessionId) FROM DocumentOutputItems;

MySQL文档中提到了此功能:

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_count-distinct

票数 30
EN

Stack Overflow用户

发布于 2018-06-03 00:42:26

许多(大多数?)SQL数据库可以使用像值这样的元组,所以你可以这样做:SELECT COUNT(DISTINCT (DocumentId, DocumentSessionId)) FROM DocumentOutputItems;如果你的数据库不支持这一点,它可以按照@oncel-umut-turer建议的校验和或其他提供良好唯一性的标量函数(如COUNT(DISTINCT CONCAT(DocumentId, ':', DocumentSessionId)) )来模拟。

元组的一个相关用法是执行IN查询,例如:SELECT * FROM DocumentOutputItems WHERE (DocumentId, DocumentSessionId) in (('a', '1'), ('b', '2'));

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

https://stackoverflow.com/questions/1471250

复制
相关文章

相似问题

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