2017-03-06 52 views
0

嗨,并提前致谢。如何统计和选择多列记录count = 1

试图简化两个SQL语句,但没有取得太大的成功。在表

  1. 计数唯一的记录(通过独特的,我指的是整个记录在表中发现,只有一次)
  2. 选择表格中的唯一记录(通过独特的,我指的是整个记录才发现一次在表中)

由于表有30列,是否有一些方法可以简单地指定表中的所有列,而不必将所有列单独包含在SQL中?

我得到这个工作,你拼写出每列名(其中“山口ñ名”指的是最后一列),但因为刚好有那么多的列是不理想......

SELECT col 1 name, col 2 name, col 3 name, …, col n name FROM table name 
GROUP BY col 1 name, col 2 name, col 3 name, …, col n name 
Having Count(*)=1 

感谢 deutz

+3

在大多数数据库,你必须指定所有列。如果您不想输入名称,则可以使用架构元数据来获取名称。 –

+0

对于#2,你可以使用'SELECT DISTINCT',它至少不需要再次重复列名的完整列表的'GROUP BY'子句。 –

+0

谢谢戈登和蒂姆。 Tim,我认为DISTINCT会得到每条记录中的一条,而不管它在表格中出现多少次。我只需要在表格中只出现一次的记录。不幸的是,我不认为你可以在WHERE子句中指定COUNT = 1。 – deutz

回答

0
create view tab_view1 as select DISTINCT * from tab; 
select COUNT(*) from tab_view1; -- first desired result 
select * from tab_view1; -- second desired result 

第一次发生是独特的,第二次不是。

如果你想排除有重复的任何记录:

create view tab_view2 as select tab.*, COUNT(*) AS occurs 
from tab group by tab.* 
having COUNT(*) = 1; 
select COUNT(*) from tab_view2; -- first desired result 
select * from tab_view2; -- second desired result 
+0

感谢尤金,我会检查一下,当我得到片刻。 – deutz

+0

该GROUP BY是特定于产品而不是有效的ANSI SQL。 – jarlh

+0

您总是可以轻松列出所有表格列 –