2016-09-28 3 views
-1

У меня есть данные, как,SQL: Повторные записи, группируя некоторые столбцы

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. Но для небольшого объема данных такой ручной расчет является доступным. У меня есть миллион записей данных, подобных этому. Поэтому изначально мне нужно найти записи, которые имеют одинаковый идентификатор и имя, но только количество элементов, отличающихся друг от друга.

Я попробовал запрос для поиска повторяющихся записей, группируя все столбцы, как показано ниже,

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 

Любое предложение было бы полезно!

+2

это MySQL или sql-server? – GuidoG

+0

, вам, вероятно, придется потратить время, переписывая свое повествование, поскольку вы вводите в заблуждение других, говоря, что вам нужно найти, сколько пищи человек ест, а затем найти дубликаты, но в конечном итоге вы говорите, что вам нужно найти количество недвойственных (уникальных) записей. SQL-сервер имеет функции окна, которые mysql не имеет, поэтому, пожалуйста, отметьте, какую систему вы используете НЕ оба! – Matt

+0

также, если вы пытаетесь провести различие между дублирующимся и не дублированным, вы можете подумать о том, чтобы улучшить ваши образцы данных в обоих случаях, а затем ваш желаемый результат, чтобы отразить эти новые данные. – Matt

ответ

-1

Просто попробуйте, как это,

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

, как подсчет дает ему сумму съеденной пищи? – Matt

+0

Я не думаю, что он пытается найти сумму. в соответствии с комментарием, который он сделал для предыдущего ответа, он пытается найти количество записей, имеющих одинаковый идентификатор и имя, но отличающихся значениями элементов. – TomFarCry

+0

Да, TomFarCry, я добавил ожидаемый результат в вопрос сейчас. –

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 
+0

Это суммирование хорошо. Но мне нужно подсчитать, что конкретная запись происходит в n раз в таблице, только отличающейся от количества элементов –

1


Привет,
Вы можете иметь простой запрос без оговорки,

select ID,Name,COUNT(*) 
from DATA_REFRESH 
group by ID,Name order by COUNT(*) desc ; 
Смежные вопросы