我有一個約1.6M行的表,其中記錄具有唯一的(身份)ID,然後也有8個字符的「代碼」字段。用於將數據分組爲集的代碼字段...具有相同代碼的所有行都在同一個集合中。每組應包含12條記錄,但似乎我們的數據加載已關閉,並且某些組不完整。在SQL中計數數據組
我需要識別不完整的集合。我將如何編寫一個查詢來選擇那些屬於集合中沒有正確數量記錄的集合中的記錄(12)?
我正在使用MS SQL 2008.
謝謝。
我有一個約1.6M行的表,其中記錄具有唯一的(身份)ID,然後也有8個字符的「代碼」字段。用於將數據分組爲集的代碼字段...具有相同代碼的所有行都在同一個集合中。每組應包含12條記錄,但似乎我們的數據加載已關閉,並且某些組不完整。在SQL中計數數據組
我需要識別不完整的集合。我將如何編寫一個查詢來選擇那些屬於集合中沒有正確數量記錄的集合中的記錄(12)?
我正在使用MS SQL 2008.
謝謝。
試試這個...
SELECT
CodeField,
COUNT(CodeField)
FROM table
GROUP BY CodeField
HAVING COUNT(CodeField) < 12
+1:你在16秒內擊敗我 – 2010-08-24 15:54:49
我並不期待這麼快就能得到很多答案。謝謝大家!工作得很好。 – 2010-08-24 16:41:12
這會給你需要更新的個人記錄:
SELECT *
FROM MyTable
WHERE CodeField IN
(
SELECT CodeField,
COUNT(CodeField) AS [Count]
FROM MyTable
GROUP BY CodeField
HAVING COUNT(CodeField) <> 12
)
錯誤 - IN子句中的字段太多。你有一個比較兩個 - MySQL支持元組,但我沒有嘗試過SQL Server。這也可以在同一個表上運行兩次,當它可以一次完成時 - 子查詢就是你所需要的。 – 2010-08-24 15:59:40
使用此得到表中少於12條守則:
SELECT yt.code
FROM YOUR_TABLE yt
GROUP BY yt.code
HAVING COUNT(*) < 12
在這個練習中,你必須使用HAVING
條款 - 本WHERE
子句不允許您在子查詢中使用聚合函數(MIN,MAX,COUNT ...),但HAVING
子句不具有該限制。
要獲得代碼都少於或多於12條表中的記錄,使用:
SELECT yt.code
FROM YOUR_TABLE yt
GROUP BY yt.code
HAVING COUNT(*) != 12
雞蛋裏挑骨頭:!=
是ANSI-92,VS <>
Bah! 14秒! – LittleBobbyTables 2010-08-24 15:55:02
rofl。還是投你一個隊友 – 2010-08-24 15:55:54
@LittleBobbyTables:你越來越近了 - 差點太近了:p – 2010-08-24 16:02:52
這是使用了一個完美的情況下, having
條款:
select codefield, count(*) from YOURTABLE
group by codefield
having count(*) <> 12
的HAVING子句允許您限制包括查詢結果只是符合某些條件的記錄。你可以把它看作WHERE
子句的一個變體,它適用於分組結果集。
查詢可以既包括WHERE
和HAVING
子句 - 然而,要認識到的結果被分組之前WHERE
子句中的謂詞進行求值,而HAVING
子句中的謂詞後進行評價。
請注意,我已使用<>
而不是<
。這將識別可能具有太多項目的代碼以及具有太少的代碼。
select code, count(*) as count
from MyTable
group by code
having count(*) <> 12
這應該工作:
select CodeField, count(*)
from yourtable
group by CodeField
having count(*) <> 12
你可以用一組由做到這一點。類似以下內容:
select
groups.code,
groups.code_count
from
(select
code,
count(code) code_count
from
records_table
group by code) groups
where
groups.code_count != 12
享受!
你現在可以從大約20個正確答案中選擇正確答案;-)。祝你好運... – 2010-08-24 15:56:44