有没有更好的方法来执行这样的查询:
SELECT COUNT(*)
FROM (SELECT DISTINCT DocumentId, DocumentSessionId
FROM DocumentOutputItems) AS internalQuery
我需要计算这个表中的不同项的数量,但是distinct超过两列。
我的查询运行良好,但我想知道是否可以使用一个查询(不使用子查询)获得最终结果
发布于 2009-09-26 03:42:35
如果您试图提高性能,可以尝试在两列的哈希值或连接值上创建持久化计算列。
持久化后,如果列是确定性的,并且您使用的是“合理的”数据库设置,则可以对其进行索引和/或在其上创建统计信息。
我相信计算列的distinct计数将等同于您的查询。
发布于 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
发布于 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'));
https://stackoverflow.com/questions/1471250
复制相似问题