获取仅在列中出现一次的值的数量

时间:2011-09-26 14:31:52

标签: mysql sql unique

首先,如果它是相关的,我使用的是MySQL,虽然我认为解决方案适用于数据库产品。我的问题是:

我有一个包含单列的简单表。列没有约束。在这一列中有一些简单的数据,例如

a
a
b
c
d
d

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

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

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

6 个答案:

答案 0 :(得分:15)

假设您的表名为T,而您的字段名为F

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

答案 1 :(得分: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)

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

答案 2 :(得分:3)

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

答案 3 :(得分:3)

可能就这么简单:

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

答案 4 :(得分:3)

把它筑巢一点......

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

答案 5 :(得分:0)

这就是我所做的并且奏效了:

SELECT name 
FROM people JOIN stars ON stars.person_id = people.id 
JOIN movies ON movies.id = stars.movie_id
WHERE year = 2004
GROUP BY name, person_id ORDER BY birth;

注意:我在这里处理了几个表。

CS50 问题集 7 (pset7) 9.sql 修复!!