Mysql SQL:通过对某些列进行分组来重复记录

Mysql SQL:通过对某些列进行分组来重复记录,mysql,sql,sql-server,Mysql,Sql,Sql Server,我有一个数据,比如 ID Name ItemA ItemB ItemC OXZ234 Adam 4 4 5 OXZ234 Adam 1 2 3 OXZ345 Tarzen 6 7 8 OXDER2 William 9 8 2 OXDER2 William 0 8 0 我需要知道每个人吃多少食物。例如,通过引用前两条记录,我可以说,ID为OXZ234的Adam记录了ItemA-5、ItemB-6和ItemC-8。但对

我有一个数据,比如

ID  Name    ItemA   ItemB   ItemC
OXZ234  Adam    4   4   5
OXZ234  Adam    1   2   3
OXZ345  Tarzen  6   7   8
OXDER2  William 9   8   2
OXDER2  William 0   8   0
我需要知道每个人吃多少食物。例如,通过引用前两条记录,我可以说,ID为OXZ234的Adam记录了ItemA-5、ItemB-6和ItemC-8。但对于少量数据,这种手动计算是可以负担的。我有一百万条这样的数据记录。因此,最初我需要找到具有相同ID和名称但只有项目计数不同的记录

我已尝试通过对所有列进行分组来查找重复记录,如下所示

select ID,Name,ItemA,ItemB,ItemC, COUNT(*)
from DATA_REFRESH
group by ID,Name,ItemA,ItemB,ItemC
having COUNT(*) > 1
但现在我必须确定条目列不同的记录

所以预期的输出是这样的

OXZ234  Adam    2
OXDER2  William 2
OXZ345  Tarzen  1
任何建议都会有帮助

你想要总和吗

select ID,
       Name,
       sum(ItemA) as ItA, 
       sum(ItemB) as ItB,
       sum(ItemC) as ItC,
       count(ID) as Occurrences -- Counts the number of entries per person
from DATA_REFRESH
group by ID,Name
having count(ID) >1 -- restricts this so only those with more than one entry appear
就这样试一下,

select ID,Name,COUNT(*)
from Sample_Check
group by ID,Name
having COUNT(*) > 1


您好,
您可以在不使用子句的情况下进行简单查询

  select ID,Name,COUNT(*)
from DATA_REFRESH
group by ID,Name order by COUNT(*) desc ;

这是mysql还是sql server?您可能应该花时间重新编写您的叙述,因为您误导了其他人,说您需要找到一个人吃了多少食物,然后找到重复的,但最终您说您需要找到非重复(唯一)记录的计数。SQL server有mysql没有的窗口功能,所以请标记您正在使用的系统,而不是两者都有!此外,如果试图区分重复和非重复,您可能会考虑在两种情况下增强示例数据,然后将期望的结果反映到新的数据中。但是我需要一个计数,一张表中的特定记录发生了
n
次,只是项目计数不同。一个计数如何给他一个吃过的食物的总数?我认为他没有试图找到总数。根据他对上一个答案所做的评论,他试图找到具有相同ID和名称但不同项值的记录数。是的,TomFarCry,我现在已经在问题中添加了预期输出。@TomFarCry是的,我看到现在读多一点OP肯定会误导他的需求“我需要知道每个人吃多少食物。例如,通过引用前两条记录,我可以说,ID为OXZ234的Adam记录了ItemA-5、ItemB-6和ItemC-8”。但进一步阅读后,OP被卡住的地方出现了:“但现在我必须识别项目列不同的记录。”因此,他找到了重复项,但现在似乎想要找到非重复项的计数