2011-09-26 17 views
5

首先,如果相关,我使用MySQL,尽管我假设解决方案可以跨DB产品使用。我的问题是这样的:获取只在列中出现一次的值的数量

我有一个单列简单的表。该列没有限制。在这一栏中有一些简单的数据,例如

a 
a 
b 
c 
d 
d 

我需要获取只出现一次的值的数量/数量。从上面的例子中可以得出2(因为只有b和c出现在列中)。

希望很明显,我不想要DISTINCT值,而是UNIQUE值。实际上,我之前通过在该列上创建了一个具有UNIQUE约束的附加表,并简单地从旧的表中插入新表,并相应地处理重复项。

我希望找到一个解决方案,不需要临时表,并可以通过一个漂亮的SELECT来完成。

+1

L OL在三个类似的答案同时发布。 – ray

+0

啊 - 但谁是最好的;) –

+0

在这一点上,重新阅读这个问题后,我实际上认为兰迪或罗曼获奖,但你确实有比我更漂亮的格式@Hugh琼斯:D – ray

回答

14

假设你的表称为T和你的领域被称为F

SELECT COUNT(F) 
FROM (
    SELECT F 
    FROM T 
    GROUP BY F 
    HAVING COUNT(*) = 1 
) AS ONLY_ONCE 
+1

为我的钱 - 这是最好的答案。 –

+0

非常感谢。完美的作品。 – BoomShaka

3
select field1, count(field1) from my_table group by field1 having count(field1) = 1 

select count(*) from (select field1, count(field1) from my_table group by field1 having count(field1) = 1) 

第一个将返回唯一的,第二个将返回唯一元素的数量。

3
select count(*) from 
(
    select 
    col1, count(*) 
    from 
    Table 
    group by 
    Col1 
    Having 
    Count(Col1) = 1 
) 
+0

我认为我的新版本是最独立的平台 –

3

难道是这样简单:

Select MyColumn From MyTable Group By MyColumn Where Count(MyColumn) = 1 
+0

给你的“唯一代表”值的列表,但不是所述值的数量(你' d必须查看返回记录的数量)。总体上不错的精神,但缺乏回答这个问题所需的顶级数量:) – Romain

+1

@Romain哦,确定......技巧!只有一个组没有upvotes。这就像中学体操一遍。 – ray

+1

我明白你的意思了......因此,我的全部是关于强调你的答案实际上是好的......而且如果它完全回答了这个问题,我已经进行了投票...... – Romain

3

只是窝了一点...

select count(cnt) from 
(select count(mycol) cnt from mytab group by mycol) 
where cnt = 1 
+0

我认为这张海报并没有把他的问题说得很对。这个答案解决了我们所有人做出的不同解释。 –

+1

@Hugh - 我不同意。看起来对我来说非常明确“我需要获得只出现一次的值的数量/数量,从上面的例子中可以得出2”,你的回答就是错误的。这与Romain的返回值相同(虽然它缺少派生表的别名) –

+1

是的 - 我重读了这个问题,但它并不含糊,但是'我不想要DISTINCT值我想要唯一的'给我发错了方法。 –

相关问题