2013-12-06 3 views
-1

Если бы я хотел найти все значения в таблице, которые встречаются более двух раз без использования группы, как бы я это сделал? Я понимаю, как это сделать с группой, и мне было любопытно, как это сделать без группы (EDIT: можете ли вы сделать это со вступлением?).Операторы SQL без группы по

Например, если у меня были фамилии в определенном почтовом индексе, и я хотел найти записи с этой фамилией более двух раз, как бы это сделать без группы в операторах SQL?

Я попытался

select name, count() from population order by name asc having count() > 2; 

, но это не то, что я от него хочу. Какие-либо предложения?

+0

Почему вы не хотите использовать 'группу by'? –

+7

Что сделала GROUP BY для вас? Он - прекрасная статья ... очищает после себя, хорошо с детьми ... что дает? – dazedandconfused

+0

Вы думали об использовании группы, но присоединились к ней для разгруппированных данных? –

ответ

2

Будучи отмеченным тегом только как sql, похоже, что существует общее решение. После пересмотра SQL:2003 должно быть справедливо сказать, что это может быть решено с оконными функциями:

SELECT name FROM (
    SELECT 
    ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) rank, 
    name 
    FROM population 
) s 
WHERE rank = 3 

Смотрите образец скрипки here.

Во всяком случае, тот факт, что можно решить эту проблему без GROUP BY не означает, что он должен :)

+1

Или 'WHERE rank = 3', и вам не нужно' DISTINCT'. –

+0

Ты совершенно прав :) –

0

кажется correlated query может работать для вас. Пожалуйста, проверьте.

Предполагая, что набор данных, приведенных ниже

Id Zip  Lastname 
--- ----- -------- 
101 12345 John 
102 12345 John 
103 12345 John 
104 12345 Ram 
105 12345 Kelly 
106 12345 Kelly 
107 45678 Krishna 
108 45678 Krishna 
109 45678 Krishna 
110 45678 David 
111 45678 David 

Запрос

select * from test.population pop1 
where 2 < (select count(*) from test.population pop2 
     where pop1.Lastname=pop2.Lastname and pop1.Zipcode = pop2.Zipcode) 

Выходной выше запроса

Id Zip  Lastname 
--- ------ -------- 
101 12345 John 
102 12345 John 
103 12345 John 
107 45678 Krishna 
108 45678 Krishna 
109 45678 Krishna 
Смежные вопросы