Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2011, 16:42   #1
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
Сообщение Возможные Причины Срабатывания DISTINCT и обход ситуации

Добрый день. Возник такой вопрос... в Access2003

у меня есть набор полей SELECTION_1:

Код:
SELECT ALL pGroup1, pGroup2,pGroup3,sum(pPole1) as [pPole1-sum],sum(pPole2) as [pPole2-sum] FROM sel 
GROUP BY pGroup1, pGroup2,pGroup3
ORDER BY pGroup1, pGroup2
произвожу из него SELECTION_2:

Код:
SELECT ALL pGroup2, pGroup3, sum([pPole1-sum]), sum([pPole2-sum]) FROM SELECTION_1 
GROUP BY pGroup2, pGroup3
В рез-те чего такое ощущение что перед суммированием в SELECTION_2
происходит DISTINCT(Т.к. полностью совпадающие строки схлопываются). Я даже ALL сделал. как мне известно,
Group By не содержит в себе DISTINCT, в чем же проблема?

И как её быть может обойти другим способом..дабы решить задачу?
Don't worry be happy

Последний раз редактировалось Izhic; 16.03.2011 в 10:10.
Izhic вне форума Ответить с цитированием
Старый 15.03.2011, 16:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну ты же группируешь? Вот и получаешь "эффект" отсутствия повторяющихся.
Добавь в группировку еще поле, которое нужно, или вообще не группируй...
Задача то какая?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.03.2011, 16:56   #3
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

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

n=||=s=||=k
----------------
1=||=11=||=2
1=||=2=||=2
1=||=11=||=2

Код:
SELECT Sum(t.s) AS [Sum-s], Count(t.k) AS [Count-k]
FROM t;
Sum-s=||=Count-k
-------------------
24=====||=3

С точки зрения вопроса выше , стало бы по мистическим причинам.
----------
13 =||= 2

=================================== ==========================
задача сгруппировать по pGroup2, pGroup3 и получить суммы по pPole1, pPole2 без DISTINCT,а получается что он сначала удаляет повторяющиеся и только по остающимся полям получает сумму.. Все стандартно... вот и возникает вопрос в чем проблема
Don't worry be happy

Последний раз редактировалось Izhic; 15.03.2011 в 17:06.
Izhic вне форума Ответить с цитированием
Старый 15.03.2011, 17:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
при группировке, повторяющиеся не должны исчезать...
Как это??? Это же группировка...
Я ща веру в SQL потеряю )))
Цитата:
24=====||=3
ну? 11+11+2 сколько будет? Все правильно )
Или я тебя не панимайт, камраде...

Ты кстати забыл группировку. Пробуй так
Код:
SELECT Sum(t.s) AS [Sum-s], Count(t.k) AS [Count-k]
FROM t group by n;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.03.2011, 17:11   #5
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

24=====||=3
правильно.
а получаетя

как будто DISTINCT
13 =||= 2
т.е. 11 - схлопнулось в один.
и сумма сосчиталась по оставшимся записям(если угодно второе схлопывание )

Код:
SELECT Sum(t.s) AS [Sum-s], Count(t.k) AS [Count-k]
FROM t group by n;
Скорее group by k забыл в табличке примере; n-отрезаю =)
и да, в оригинал группировка есть ..
Don't worry be happy

Последний раз редактировалось Izhic; 15.03.2011 в 17:15.
Izhic вне форума Ответить с цитированием
Старый 15.03.2011, 17:35   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
т.е. 11 - схлопнулось в один.
Это с группировкой или без?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.03.2011, 10:15   #7
Izhic
Форумчанин
 
Аватар для Izhic
 
Регистрация: 08.10.2008
Сообщений: 668
По умолчанию

с группировкой схлопнулись.

да, в selection_1, в оригинале ещё был Order By(дописал в первом посте =[).
//пациенты всегда врут(с)Др.Хаус

Убрал данную операцию. и Группировка в Selection_2 заработала без несуществующего Distinct.

Stilet спасибо, за помощь в разборе ситуации..
остается не понятно влияние order By ,т .к. он производится с полным набором полей и влиять как DISTINCT на Selction_2 по идее не должен - верно? почему же влияет?
Don't worry be happy

Последний раз редактировалось Izhic; 16.03.2011 в 10:17.
Izhic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
все возможные числа nick_5714 Помощь студентам 7 16.02.2011 15:41
Работает ли при "SQL dialect 3" оператор DISTINCT? 3lander БД в Delphi 1 12.10.2007 00:21
Сайт был недоступен около 40 часов, официальные причины. Alar О форуме и сайтах клуба 2 09.03.2007 16:46