SQL中的数据组计数
我有一个大约160万行的表,其中记录有一个唯一的标识ID,然后还有一个8字符的代码字段。用于将数据分组到集合中的代码字段…具有相同代码的所有行都在同一集合中。每个数据集应该由12条记录组成,但似乎我们的数据加载已停止,有些数据集不完整 我需要识别不完整的集合。如何编写查询以仅选择属于集合12中记录数不正确的集合的那些记录 我正在使用MS SQL 2008SQL中的数据组计数,sql,sql-server,tsql,sql-server-2008,aggregate-functions,Sql,Sql Server,Tsql,Sql Server 2008,Aggregate Functions,我有一个大约160万行的表,其中记录有一个唯一的标识ID,然后还有一个8字符的代码字段。用于将数据分组到集合中的代码字段…具有相同代码的所有行都在同一集合中。每个数据集应该由12条记录组成,但似乎我们的数据加载已停止,有些数据集不完整 我需要识别不完整的集合。如何编写查询以仅选择属于集合12中记录数不正确的集合的那些记录 我正在使用MS SQL 2008 谢谢。这将为您提供需要更新的个人记录: SELECT * FROM MyTable WHERE CodeField IN
谢谢。这将为您提供需要更新的个人记录:
SELECT *
FROM MyTable
WHERE CodeField IN
(
SELECT CodeField,
COUNT(CodeField) AS [Count]
FROM MyTable
GROUP BY CodeField
HAVING COUNT(CodeField) <> 12
)
试试这个
SELECT
CodeField,
COUNT(CodeField)
FROM table
GROUP BY CodeField
HAVING COUNT(CodeField) < 12
使用此选项可获取表中记录少于12条的代码:
SELECT yt.code
FROM YOUR_TABLE yt
GROUP BY yt.code
HAVING COUNT(*) < 12
挑剔:!=是ANSI-92,vs这是使用having子句的最佳情况: 子句允许您将包含GROUP BY的查询的结果限制为仅匹配特定条件的记录。您可以将其视为WHERE子句的变体,该子句用于分组结果集 查询可以同时包含WHERE和HAVING子句-但是,要知道WHERE子句中的谓词是在结果分组之前计算的,而HAVING子句中的谓词是在结果分组之后计算的。注意,我使用了而不是这应该可以:
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个正确答案中选择正确答案;-。祝你好运…错误-in子句中的字段太多。有一个和两个相比——MySQL支持元组,但我还没有在SQL Server上尝试过。这也会在同一个表上运行两次,而只需一次即可完成-子查询就是您所需要的一切。@LittleByTables:您越来越近了-几乎太近了:p您可以为该表获得分数!=因素因为事实证明,我们的一些电视机也有太多的物品我没想到这么快就能得到很多答案。谢谢大家!效果很好。
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