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

时间:2016-09-28 13:59:39

标签: 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的亚当吃了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

任何建议都会有所帮助!

3 个答案:

答案 0 :(得分:4)

你想要SUM

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

答案 1 :(得分:1)

嗨,你可以在没有子句的情况下进行简单的查询,

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

答案 2 :(得分:-1)

只需尝试这样,

underscoreJS