Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь двух GROUP BY / 19 сообщений из 19, страница 1 из 1
30.07.2002, 14:35:32
    #32039654
Antoniy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
Здравствуйте!
Помогите пожалуйста составить запрос. Условно у меня есть 2 таблицы: TABLE1 и TABLE2 с полями TAB_N и SUM_ZPL (таб. Номер и сумма зарплаты). Как мне вывести TABLE1.TAB_N сумма SUM_ZPL по которым не равна сумме SUM_ZPL соответствующих TABLE2.TAB_N
В общем надо связать 2 запроса
SELECT TAB_N, SUM(SUM_ZPL)
FROM TABLE1
GROUP BY TAB_N
и
SELECT TAB_N, SUM(SUM_ZPL)
FROM TABLE2
GROUP BY TAB_N
по условию TABLE1.TAB_N = TABLE2.TAB_N and SUM(TABLE1.SUM_ZPL) <> SUM(TABLE1.SUM_ZPL).
...
Рейтинг: 0 / 0
30.07.2002, 14:49:32
    #32039661
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
где-то так...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT * 
FROM (SELECT TOP  100  PERCENT TAB_N, SUM(SUM_ZPL) as s 
          FROM TABLE1 
          GROUP BY TAB_N) as s1, 
        (SELECT TOP  100  PERCENT TAB_N, SUM(SUM_ZPL) as s
         FROM TABLE2 
         GROUP BY TAB_N ) as s2
WHERE s1.TAB_N = s2.TAB_N and s1.s <> s2.s
...
Рейтинг: 0 / 0
30.07.2002, 14:53:20
    #32039663
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
объясните плиз, для чего тут используется
TOP 100 PERCENT
...
Рейтинг: 0 / 0
30.07.2002, 14:57:56
    #32039668
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
а ты попробуй без них.....
...
Рейтинг: 0 / 0
30.07.2002, 15:01:35
    #32039672
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
попробовал, все ок
...
Рейтинг: 0 / 0
30.07.2002, 15:09:13
    #32039674
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
для меня так и осталось загадкой, для чего здесь
TOP 100 PERCENT
...
Рейтинг: 0 / 0
30.07.2002, 15:15:45
    #32039675
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
а план запроса не поменялся?
...
Рейтинг: 0 / 0
30.07.2002, 15:18:08
    #32039676
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
представь себе - нет
...
Рейтинг: 0 / 0
30.07.2002, 15:21:53
    #32039678
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
у меня меняется.... сервер на двухпроцессорной тачке....
...
Рейтинг: 0 / 0
30.07.2002, 15:23:09
    #32039679
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
у меня то же 2х процессорная
...
Рейтинг: 0 / 0
30.07.2002, 15:25:34
    #32039682
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
тогда не знаю.... и сегодня мне все равно....
ДАЖЕ ПИВО НЕ ПОМОГАЕТ!!!!!!!!
ох как мне х...во...
а вчерась було хорош..... но.......
...
Рейтинг: 0 / 0
30.07.2002, 15:30:09
    #32039685
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
я понимаю что тебе х....во, но может я чего нибудь не знаю, не понимаю. Какими идеями ты руководствовался когда писал TOP 100 PERCENT ?
...
Рейтинг: 0 / 0
30.07.2002, 15:41:45
    #32039688
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
просто уже привычка... ну и если помоему в подзапросе есть ордерби без топ ругается(или при юнион)...
да и на план выполнения запроса все таки влияет...
ты объясняеш планировщику что тебе нуно более конкретно....
...
Рейтинг: 0 / 0
30.07.2002, 15:44:45
    #32039690
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
т.е. ты ему говоришь, давай все данные, а так он выдаст, например, 1%, а остальное зажилит ? ;-)
...
Рейтинг: 0 / 0
30.07.2002, 15:47:20
    #32039691
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
а ты не смейся.... часто это помогает....
а еще хош прикол...
в запросе с if exist....
если в условии использовать топ 1 - выполняется почти всегда быстрее...
...
Рейтинг: 0 / 0
30.07.2002, 15:48:51
    #32039692
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
мда, бывает же такое, ну будем иметь ввиду
...
Рейтинг: 0 / 0
30.07.2002, 16:22:04
    #32039702
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
2 MiCe & и остальным, наивно верящим что exists (select 1 from... будет работать быстрее чем exists (select * from...

Ну устал уже такое читать.
Как когда-то говорила одна моя знакомая, будучи выпившей, другой знакомой, еще более выпившей: "Ты проснёшься и тебе станет стыдно".

Проведите такой экспиримент. Три запроса:
1.
Код: plaintext
1.
2.
select * from sysobjects o 
where exists (select  1  from sysobjects o1, sysobjects o2 where o.id=o1.id-o2.id)

2.
Код: plaintext
1.
select * from sysobjects o 
where exists (select * from sysobjects o1, sysobjects o2 where o.id=o1.id-o2.id)

3.
Код: plaintext
1.
select * from sysobjects o 
where exists (select top  1   1  from sysobjects o1, sysobjects o2 where o.id=o1.id-o2.id)


У меня все эти три запроса выполняются 10-11 сек.(раз по 5 попробовал каждый). Если у Вас где-то когда-то получилось дольше - скорее всего просто была загрузка сервера большая. Ну не бывает чудес.
...
Рейтинг: 0 / 0
30.07.2002, 19:08:11
    #32039754
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
ню-ню.... и какие при этом индексы?....
...
Рейтинг: 0 / 0
31.07.2002, 10:30:22
    #32039830
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Связь двух GROUP BY
ну можно усложнить
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
select * into #o0 from sysobjects
select * into #o1 from sysobjects
select * into #o2 from sysobjects
select * into #o3 from sysobjects

insert #o0 select * from sysobjects
insert #o1 select * from sysobjects
insert #o2 select * from sysobjects
insert #o3 select * from sysobjects


insert #o0 select * from sysobjects
insert #o1 select * from sysobjects
insert #o2 select * from sysobjects
insert #o3 select * from sysobjects


insert #o0 select * from sysobjects
insert #o1 select * from sysobjects
insert #o2 select * from sysobjects
insert #o3 select * from sysobjects


insert #o0 select * from sysobjects
insert #o1 select * from sysobjects
insert #o2 select * from sysobjects
insert #o3 select * from sysobjects
create index o0 on #o0(id)
create index o0 on #o1(id)
create index o0 on #o2(id)

go
declare @d datetime
select @d=getdate()

select * from #o0 o 
where exists (select top  1   1  from #o1 o1, #o2 o2, #o3 o3 where o1.id=o.id and o2.id=o.id and o3.id/ 100 =o3.id/ 100 +o1.id/ 100000 +o2.id/ 100000 )

select datediff(ms, @d, getdate())


Я пробовал всякие комбинации, но результат в пределах 2300-2400ms не зависимо что пишется select top 1 1 или select *

Попробуйте придумать запрос где бы была разница
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь двух GROUP BY / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]