Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Нюансы в предложении OVER  [new]
zojica
Member

Откуда:
Сообщений: 2
Добрый день!
Я не очень программист, но иногда вынуждена писать запросы. Вот недавно открыла для себя аналитические функции. В связи с этим возник вопрос: есть табличка tableZ вот такого содержания:
Date District Town Type Cost

24.02.2015 Район2 ГородА Тип2 234500
24.02.2015 Район1 ГородА Тип1 10000
24.02.2015 Район5 ГородВ Тип3 75600
25.02.2015 Район4 ГородВ Тип1 10000
26.02.2015 Район1 ГородА Тип3 17800
26.02.2015 Район2 ГородА Тип3 1200
26.02.2015 Район2 ГородА Тип3 4800
26.02.2015 Район3 ГородВ Тип3 15000
27.02.2015 Район2 ГородА Тип3 1300
07.03.2015 Район4 ГородВ Тип3 145000
07.03.2015 Район19 ГородЖ Тип1 16300
08.03.2015 Район8 ГородБ Тип1 150000
10.03.2015 Район7 ГородБ Тип3 98000
10.03.2015 Район7 ГородБ Тип2 100000
10.03.2015 Район7 ГородБ Тип2 51500
10.03.2015 Район4 ГородВ Тип2 23000
14.03.2015 Район6 ГородА Тип1 19000
15.03.2015 Район20 ГородЗ Тип1 87100



Необходимо вывести сумму значений поля [Cost] за весь 2015 год в разрезе по городам [Town] и типу [Type] .

Я попробовала написать такой запрос:

SELECT Town, Type, SUM(Cost) OVER (PARTITION BY Town, Type ) sum_cost
FROM tableZ

Итог
District Type sum_cost
ГородА Тип3 25100
ГородА Тип3 25100
ГородА Тип3 25100
ГородА Тип3 25100
ГородА Тип2 234500
ГородА Тип1 29000
ГородА Тип1 29000
ГородБ Тип3 98000
ГородБ Тип2 151500
ГородБ Тип2 151500
ГородБ Тип1 150000
ГородВ Тип3 235600
ГородВ Тип3 235600
ГородВ Тип3 235600
ГородВ Тип2 23000
ГородВ Тип1 10000
ГородЖ Тип1 16300
ГородЗ Тип1 87100



Если я что-то понимаю, то суммируется правильно, но данные дублируются из-за того, что поле [District] не входит в группировку. Но, насколько я усвоила, в оконных функциях немного другой принцип. Помогите, пожалуйста, разобраться, что я делаю не так?
19 мар 15, 17:17    [17406562]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
zojica,

написать после SELECT DISTINCT - не судьба?
Хотя, именно в этом случае почему бы не
SELECT Town, Type, sum_cost=SUM(Cost) FROM tableZ GROUP BY Town, Type
Это намного эффективнее
19 мар 15, 17:21    [17406585]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
o-o
Guest
не оно строки дублирует, а вы выводите сумму в каждой строке.
если как раз это не надо, то вас спасет традиционный group by Town, Type
19 мар 15, 17:23    [17406600]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
QWERTY!
Guest
А чем простая группировка неустраивает? OVER принципиален Вам?

SELECT Town, Type, SUM(Cost) as SUM_COST 
FROM tableZ
WHERE Date BETWEEN '2015-01-01 00:00:00.001' and '2015-12-31 23:59:59.999'
GROUP BY Town, Type
19 мар 15, 17:25    [17406609]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
o-o
Guest
QWERTY!
А чем простая группировка неустраивает? OVER принципиален Вам?

вы ничего не понимаете в моде.
тем более, в совсем недавно для себя открытой
19 мар 15, 17:27    [17406622]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
QWERTY!
А чем простая группировка неустраивает? OVER принципиален Вам?

SELECT Town, Type, SUM(Cost) as SUM_COST 
FROM tableZ
WHERE Date BETWEEN '2015-01-01 00:00:00.001' and '2015-12-31 23:59:59.999'
GROUP BY Town, Type
WHERE Date>='2015' AND Date<'2016'
не корректнее ли будет?
19 мар 15, 17:28    [17406626]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
QWERTY!
А чем простая группировка неустраивает? OVER принципиален Вам?

SELECT Town, Type, SUM(Cost) as SUM_COST 
FROM tableZ
WHERE Date BETWEEN '2015-01-01 00:00:00.001' and '2015-12-31 23:59:59.999'
GROUP BY Town, Type

WHERE Date>='2015' AND Date<'2016'

не корректнее ли будет?
Тем более, '2015-01-01 00:00:00.001' - формат даты-времени, зависящий от настроек на сервере.
19 мар 15, 17:29    [17406635]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
QWERTY!
Guest
автор
не корректнее ли будет?
согласен с Вами корректнее, моя ошибка.

автор
Тем более, '2015-01-01 00:00:00.001' - формат даты-времени, зависящий от настроек на сервере.
Возможно, ткните носом в универсальный формат, заранее при многом благодарен.
19 мар 15, 17:32    [17406654]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
QWERTY
автор
Тем более, '2015-01-01 00:00:00.001' - формат даты-времени, зависящий от настроек на сервере.
Возможно, ткните носом в универсальный формат, заранее при многом благодарен.
'2015-01-01T00:00:00.001'
'20150101 00:00:00.001'
19 мар 15, 17:34    [17406668]     Ответить | Цитировать Сообщить модератору
 Re: Нюансы в предложении OVER  [new]
zojica
Member

Откуда:
Сообщений: 2
Вах!!! Спасибо всем!!!
Я - кукушка! Простите за мудрствование - это что-то я переборщила!
19 мар 15, 17:37    [17406684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить