首先,如果它是相关的,我使用的是MySQL,虽然我认为解决方案适用于数据库产品。我的问题是:
我有一个包含单列的简单表。列没有约束。在这一列中有一些简单的数据,例如
a
a
b
c
d
d
我需要获取仅出现一次的值的数量/数量。从上面的示例中可以看出2(因为只有b和c在列中出现一次)。
希望很明显我不想要DISTINCT值,而是需要UNIQUE值。我之前实际上已经这样做了,通过在列上创建一个带有UNIQUE约束的附加表,并简单地从旧表中插入新表,相应地处理重复项。
我希望找到一个不需要临时表的解决方案,并且可以通过一个漂亮的SELECT来完成。
答案 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 修复!!