2017-03-06 23 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

您總是可以輕鬆列出所有表格列 –