Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS SQL Server применение статистических, окнных функций 
V
    Опции темы
Gluttton
Дата 27.10.2009, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Доброго времени суток!

MS SQL Server 2005.
Дана таблица T:
(ключ - поле В)

Код

А    В    С
------------
А    11    1
А    12    2
В    13    1
А    14    1
А    15    1
С    16    3


Необходимо получить:
(в правой колонке необходимо отобразить сумму всех элементов стлбца С таблицы)

Код

А    В    S
------------
А    11    9
А    12    9
В    13    9
А    14    9
А    15    9
С    16    9


Каким образом можно это получить используя оконные функции?
Что то вроде такого:
Код

select
    T.A,
    T.B,
    sum(T.C) over (partition by ...) as S
from T



--------------------
Слава Україні!
PM MAIL   Вверх
Gudinya
Дата 27.10.2009, 02:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 2.2.2008

Репутация: 2
Всего: 8



Может конечно глупость напишу, но на оракле сработает, может и на MS SQL Server 2005 покатит
Код

select
    T.A,
    T.B,
    sum(T.C) over () as S
from T

а так же сработает

Код

select
    T.A,
    T.B,
    sum(T.C) over (partition by null)   as S
from T


Это сообщение отредактировал(а) Gudinya - 27.10.2009, 02:13
PM MAIL ICQ   Вверх
Gluttton
Дата 27.10.2009, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Цитата

Код

select
    T.A,
    T.B,
    sum(T.C) over () as S
from T



До этого я смог додуматься smile, но желанного результата такой запрос мне не вернул...
В терминах приведенных мною тестовых данных данных запрос выводил сумму для А, В и С, но не для всех вместе.
Код

А    В    S
------------
А    11    5
А    12    5
В    13    1
А    14    5
А    15    5
С    16    3


Цитата

Код

select
    T.A,
    T.B,
    sum(T.C) over (partition by null)   as S
from T


А вот за это спасибо - возвращает общую сумму!


--------------------
Слава Україні!
PM MAIL   Вверх
Zloxa
Дата 27.10.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Gluttton @  27.10.2009,  08:58 Найти цитируемый пост)
но желанного результата такой запрос мне не вернул

Вообще удивительно.
В доке указано, что для оконного агрегата предложение partition может быть опущено, однако я не смог найти какое поведение в этом случае ожидать от sql машины.
Я вот лично не понимаю, с какого бы бадуна, вдруг, MS SQL нателепал, что секционироваться надо по А.
От чегото мне кажется что это бага.
Жаль у меня только 2000й интст ейсть для напобаловаться. :(


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
ТоляМБА
Дата 27.10.2009, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



эмм... я конечно дико извиняюсь, а разве так нельзя?:

Код
select a, b, (select sum(c) from table1) as c
from table1

PM   Вверх
Zloxa
Дата 27.10.2009, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(ТоляМБА @  27.10.2009,  11:38 Найти цитируемый пост)
 а разве так нельзя?

Можно smile
И нужно, оконная функция в таких случаях наверняка окажется мене эффективной smile
Просто Gluttton - ищущая натура smile


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Gluttton
Дата 27.10.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Начинающий
***


Профиль
Группа: Завсегдатай
Сообщений: 1170
Регистрация: 28.8.2008
Где: Феодосия

Репутация: 24
Всего: 54



Zloxa, 
Ну, может и я где то ошибся, т.к. та БД, которую я привожу она условная. Истинная БД несколько сложнее и сложнее запрос. Поэтому может и я где то "прохлопал" какую-нибудь "не важную" деталь.

Но! Однозначно могу сказать, что полностью идентичные запросы, которые отличаются лишь:

Код

over ()

 и
Код

over (partition by null)


Возвращают разные результаты, причем в первом случае запрос возвращает общую сумму, а во втором случае не полную, а сумму в подгруппах...

Добавлено через 8 минут и 27 секунд
 smile 
Цитата(Zloxa @  27.10.2009,  11:51 Найти цитируемый пост)
Просто Gluttton - ищущая натура 


smile  , росту над собой smile ...


--------------------
Слава Україні!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.