2014-07-10 43 views
0

我想以另一种方式编写以下查询替代计划数不同

SELECT COUNT(DISTINCT col1) FROM table. 

我不想使用distinct。有其他方法吗?

+0

但是......你......显然......要......计数......不同的值。为什么你想避免'DISTINCT'? –

+0

使用截然不同的性能问题。 –

+0

那么当时的团队呢? – Edper

回答

2

尝试GROUP BY作为一个子查询和COUNT()从外部查询。它会达到相同的结果。

SELECT COUNT(*) 
FROM 
(
    SELECT Col1 
    FROM Table 
    GROUP BY Col1 
) tbl 
+0

我同意Damien_The_Unbeliever在他对这个问题的评论。 查看执行计划以找出性能不佳的原因(例如缺少索引等)。 SQL是一种声明性语言,数据库引擎会创建一个物理执行计划来确定查询的执行方式。在很多情况下,即使您为相同的目标尝试使用不同的SQL语法,执行计划也是一样的。我已经执行了两个查询(这一个和原始的DISTINCT),我得到了他们两个相同的执行计划(所以他们之间没有性能差异)。 – saso

+0

@saso:我当然同意Damien的观点,但我只是向OP展示了他提出的查询的替代方案。 – Edper

+0

你说得对。我的评论实际上是针对原始海报的,因为我相信他正在错误的“地方”寻找解决问题的方法。对不起,如果不清楚。 – saso

0
Select count(col1) from table GROUP BY col1 
+1

该查询返回不同的数据。 OP要计算列中不同值的数量(标量值),则查询返回其他值:每个不同col1值的记录计数,例如,某个col1值在表格中出现多少次。 – saso

0

试试这个

SELECT COUNT(Col1) 
FROM (SELECT ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col1) As RNO, Col1 
     FROM Table_Name) 
WHERE RNO = 1