powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь двух GROUP BY
19 сообщений из 19, страница 1 из 1
Связь двух GROUP BY
    #32039654
Antoniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите пожалуйста составить запрос. Условно у меня есть 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
Связь двух GROUP BY
    #32039661
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где-то так...
Код: 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
Связь двух GROUP BY
    #32039663
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
объясните плиз, для чего тут используется
TOP 100 PERCENT
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039668
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты попробуй без них.....
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039672
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал, все ок
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039674
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для меня так и осталось загадкой, для чего здесь
TOP 100 PERCENT
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039675
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а план запроса не поменялся?
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039676
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
представь себе - нет
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039678
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня меняется.... сервер на двухпроцессорной тачке....
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039679
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня то же 2х процессорная
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039682
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда не знаю.... и сегодня мне все равно....
ДАЖЕ ПИВО НЕ ПОМОГАЕТ!!!!!!!!
ох как мне х...во...
а вчерась було хорош..... но.......
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039685
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я понимаю что тебе х....во, но может я чего нибудь не знаю, не понимаю. Какими идеями ты руководствовался когда писал TOP 100 PERCENT ?
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039688
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
просто уже привычка... ну и если помоему в подзапросе есть ордерби без топ ругается(или при юнион)...
да и на план выполнения запроса все таки влияет...
ты объясняеш планировщику что тебе нуно более конкретно....
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039690
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т.е. ты ему говоришь, давай все данные, а так он выдаст, например, 1%, а остальное зажилит ? ;-)
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039691
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а ты не смейся.... часто это помогает....
а еще хош прикол...
в запросе с if exist....
если в условии использовать топ 1 - выполняется почти всегда быстрее...
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039692
Rom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мда, бывает же такое, ну будем иметь ввиду
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039702
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Связь двух GROUP BY
    #32039754
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ню-ню.... и какие при этом индексы?....
...
Рейтинг: 0 / 0
Связь двух GROUP BY
    #32039830
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну можно усложнить
Код: 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
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Связь двух GROUP BY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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