Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка с подсчётом  [new]
MonikBravo
Guest
Всем часик в радость! :)
помогите составить запрос, чтобы запросить данные с подсчётом общего количества в группе:
declare @Alphabet table(ID int, GroupID int, Caption varchar(20))
insert into @Alphabet(ID, GroupID int, Caption)
select 1, 1, 'ALPHA' union all
select 2, 2, 'BETA' union all
select 3, 2, 'GAMMA' union all
select 4, 2, 'ZETA' union all
select 5, 3, 'EPSILON' union all
select 6, 1, 'ZETA'


Вот надо селект исправить,
SELECT ID, GroupID, Caption, (Count(*)....????) AS CountInGroup
ORDER BY Caption


чтобы получился такой ответ:
ID, GroupID, Caption, CountInGroup 
1, 1, ALPHA, 2
2, 2, BETA, 3
3, 2, GAMMA, 3
4, 2, ZETA, 3
5, 3, EPSILON, 1
6, 1, ZETA, 2
6 сен 15, 11:26    [18114639]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
https://msdn.microsoft.com/ru-ru/library/ms175997(v=sql.120).aspx
Последний пример.
6 сен 15, 11:54    [18114681]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
MonikBravo
Guest
invm,

последний пример, там с предложением OVER?
написал так:
SELECT ID, GroupID, Caption, COUNT(*) OVER (PARTITION BY GroupID) AS CountInGroup
FROM @Alphabet
ORDER BY Caption


Надеюсь что так верно. Спасибо!
6 сен 15, 12:24    [18114745]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
MonikBravo
Guest
о, не-е-е-ет. :(
добавил одну таблицу, и всё, выдаётся не верный результат в Count (умножается на само себя, было 2, стало 4; было 3, стало 9 и т.д.).
SELECT a.ID, a.GroupID,  a.Caption, COUNT(*) OVER (PARTITION BY a.GroupID) AS CountInGroup, wi.Info
FROM @Alphabet a LEFT JOIN @WordInfo wi ON a.GroupID = wi.ID
ORDER BY Caption


нид хелпу.
6 сен 15, 13:08    [18114812]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
Glory
Member

Откуда:
Сообщений: 104760
MonikBravo
умножается на само себя

COUNT просто считает число записей в выборке. Если ваш join увеличил число записей, то COUNT вам просто показал это
6 сен 15, 13:10    [18114819]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
MonikBravo
Guest
Glory,

и в первом и во втором запросе общее количество записей одинаково, и там и там по 3776 записей.
6 сен 15, 13:22    [18114833]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
Glory
Member

Откуда:
Сообщений: 104760
MonikBravo
Glory,

и в первом и во втором запросе общее количество записей одинаково, и там и там по 3776 записей.

Ага, а COUNT сам "наумножал" записей
6 сен 15, 13:30    [18114861]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
MonikBravo
Guest
Glory
MonikBravo
Glory,

и в первом и во втором запросе общее количество записей одинаково, и там и там по 3776 записей.

Ага, а COUNT сам "наумножал" записей


точно, по ходу дубликаты в @WordInfo, спасибо!
ужас только, как "убить" все дубликаты, кроме одного, если вот такие записи в @WordInfo (ID, Info)
1, Text1
1, Text1
2, Text1
2, Text1
2, Text1
3, Text1
а оставить только:
1, Text1
2, Text1
3, Text1
ведь, никак не зацепится за поле.
6 сен 15, 13:46    [18114902]     Ответить | Цитировать Сообщить модератору
 Re: Выборка с подсчётом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
MonikBravo
ужас только, как "убить" все дубликаты, кроме одного
SELECT a.ID, a.GroupID,  a.Caption, COUNT(*) OVER (PARTITION BY a.GroupID) AS CountInGroup, wi.Info
FROM @Alphabet a outer apply (select top (1) Info from @WordInfo where ID = a.GroupID) wi
ORDER BY Caption
6 сен 15, 14:26    [18114985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить