powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос на интервью
25 сообщений из 35, страница 1 из 2
Вопрос на интервью
    #39770100
w31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
w31
Гость
Возможно ли написать более оптимально запрос :

SELECT
DOCUMENTNO,
CASE
WHEN T1.DAID = 111111 THEN 'DB'
WHEN T1.CAID = 111111 THEN 'CR'
END DBCRD,
SITEID,
CASE
WHEN T1.DAID = 111111 THEN T1.AANO
WHEN T1.CAID = 111111 AND T1.ID = T2.ID_BI2 THEN T2.KACC
WHEN T1.CAID = 111111 THEN T1.ABNO
END SAMEACC,
CASE
WHEN T1.DAID = 111111 THEN T1.BAID
WHEN T1.CAID = 111111 AND T1.ID = T2.ID_BI2 THEN T2.KMFO
WHEN T1.CAID = 111111 THEN T1.BBID
END SAMEMFO,
CASE
WHEN T1.DAID = 111111 THEN T1.CABNAME
WHEN T1.CAID = 111111 AND TABLE1.ID = T2.ID_BI2 THEN T2.NAME_PAYEE
WHEN T1.CAID = 111111 THEN T1.CABNAME
END SAMENAME,
(SELECT
t.SNAME
FROM
SOMECODE t WHERE T.ID = CASE
WHEN DAID = 111111 THEN AID
WHEN CAID = 111111 THEN BID
END ) VALUEB,
CID,
SUMMAEQ,
PLATPURPOSE
FROM TABLE1 T1
FULL OUTER JOIN TABLE2 T2 ON T1.ID = T2.ID_BI2 WHERE
T1.DAID = 111111 OR T1.CAID = 111111 AND
T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30'
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770103
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
w31,

full -> left
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770104
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
w31,

критерий оптимальности?
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770108
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
w31более оптимально запросЕсли поубирать переводы строк и незначащие пробелы, то длина запроса оптимизируется даже не смотря на то, что нужно два раза добавить date.
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770138
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
SELECT
	DOCUMENTNO,
	'DB' as DBCRD,
	SITEID,
	T1.AANO as SAMEACC,
  T1.BAID as SAMEMFO,
  T1.CABNAME as SAMENAME,
	t.SNAME as VALUEB,
	CID,
	SUMMAEQ,
	PLATPURPOSE
	FROM TABLE1 T1
  LEFT JOIN SOMECODE t on T.ID = AID
	LEFT JOIN TABLE2 T2 ON T1.ID = T2.ID_BI2 
  WHERE	T1.DAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30' 
union all
SELECT
	DOCUMENTNO,
  'CR' as DBCRD,
	SITEID,
	nvl(T2.KACC,T1.ABNO) as SAMEACC,
  nvl(T2.KMFO,T1.BBID) as SAMEMFO,
  nvl(T2.NAME_PAYEE,T1.CABNAME) as SAMENAME,
	t.SNAME as VALUEB,
	CID,
	SUMMAEQ,
	PLATPURPOSE
	FROM TABLE1 T1
  LEFT JOIN SOMECODE t on T.ID = BID
	LEFT JOIN TABLE2 T2 ON T1.ID = T2.ID_BI2 
  WHERE	T1.DAID != 111111 and T1.CAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30'   
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770153
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
  WHERE	T1.DAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30' 
union all
...
  WHERE	T1.DAID != 111111 and T1.CAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30'   


Неверно.
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770158
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDshedoo
Код: plsql
1.
2.
3.
4.
5.
6.
  WHERE	T1.DAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30' 
union all
...
  WHERE	T1.DAID != 111111 and T1.CAID = 111111 
  AND	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30'   


Неверно.

Если я правильно понял, то в оригинале очепятка в виде отсутствующих скобок:

Код: plsql
1.
2.
T1.DAID = 111111 OR T1.CAID = 111111 AND
	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30' 



Код: plsql
1.
2.
(T1.DAID = 111111 OR T1.CAID = 111111) AND
	T1.SOMEDATE BETWEEN '2018-11-01' AND '2018-11-30' 
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770163
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedooв оригинале очепятка
В оригинале - тестовое задание, которое позволяет интервьюеру оценить компетенцию кандидата.
Если бы интервьюером был я, то Ваш ответ для начала сказал бы мне, что Вы не сумели написать эквивалентный запрос :)
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770164
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-full -> left
Как минимум, зависит от
Код: plsql
1.
2.
3.
      ,CID
      ,SUMMAEQ
      ,PLATPURPOSE
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770170
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousDshedooв оригинале очепятка
В оригинале - тестовое задание, которое позволяет интервьюеру оценить компетенцию кандидата.
Если бы интервьюером был я, то Ваш ответ для начала сказал бы мне, что Вы не сумели написать эквивалентный запрос :)

С таким подходом можно и по поводу алиасов придираться, например:
Код: plsql
1.
2.
SOMECODE t WHERE T.ID = CASE
	WHEN DAID = 111111 THEN AID



Вдруг тут имелся ввиду не T1.DAID, а T.DIAD или T2.DAID.
Нигде же не сказано, что запрос возвращает данные, а не ORA-01427
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770176
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous-2-full -> left
Как минимум, зависит от
Код: plsql
1.
2.
3.
      ,CID
      ,SUMMAEQ
      ,PLATPURPOSE


а в чем зависимость?

ps
если T1.SOMEDATE тип date, я б дописал date '2018-11-01' AND date '2018-11-30'

....
stax
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770177
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxа в чем зависимость?
А они в какой таблице?
-2- предложил уйти от full outer, который мог быть написан не "шоббуло".
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770187
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxа в чем зависимость?
А они в какой таблице?
-2- предложил уйти от full outer, который мог быть написан не "шоббуло".
Код: plsql
1.
2.
3.
WHERE
	T1.[...] OR T1.[...] AND
	T1.[...]
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770188
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
2.
3.
WHERE
	T1.[...] OR T1.[...] AND
	T1.[...]


Вы правы.
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770191
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxа в чем зависимость?
А они в какой таблице?
-2- предложил уйти от full outer, который мог быть написан не "шоббуло".

я в смысле как влияет на замену full outer?

ps
я б добавил всюду алиасы, но на оптимальность ето повлияет мизерно

.....
stax
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770199
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxя в смысле как влияет на замену full outer?
С учетом where - уже никак, я "перебдел" :)
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770205
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
	nvl(T2.KACC,T1.ABNO) as SAMEACC,
  nvl(T2.KMFO,T1.BBID) as SAMEMFO,
  nvl(T2.NAME_PAYEE,T1.CABNAME) as SAMENAME,



Код: plsql
1.
2.
3.
	nvl2(T2.ID_BI2,T2.KACC,T1.ABNO) as SAMEACC,
  nvl2(T2.ID_BI2,T2.KMFO,T1.BBID) as SAMEMFO,
  nvl2(T2.ID_BI2,T2.NAME_PAYEE,T1.CABNAME) as SAMENAME,
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770213
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxя в смысле как влияет на замену full outer?
С учетом where - уже никак, я "перебдел" :)Правда замена влияет только на визуальную оптимальность.
Оптимизатор и сам разберется кто outer, а кто нет.
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770220
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
  nvl(T2.NAME_PAYEE,T1.CABNAME) as SAMENAME,



Код: plsql
1.
  nvl2(T2.ID_BI2,T2.NAME_PAYEE,T1.CABNAME) as SAMENAME,


Опять неверно :)
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770224
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
	nvl(T2.KACC,T1.ABNO) as SAMEACC,



CASE
WHEN T1.DAID = 111111 THEN T1.AANO
WHEN T1.CAID = 111111 AND T1.ID = T2.ID_BI2 THEN T2.KACC
WHEN T1.CAID = 111111 THEN T1.ABNO
END SAMEACC,


и тд
....
stax
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770228
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxи тд
Да.
Код: plsql
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.
with table1(ID, DAID,CAID,BAID,BBID) as(
                    select 1, 111111, 222222, 'T1.BAID', 'T1.BBID'
from dual union all select 2, 111111, 222222, 'T1.BAID', 'T1.BBID'
from dual union all select 3, 222222, 111111, 'T1.BAID', 'T1.BBID'
from dual union all select 4, 222222, 111111, 'T1.BAID', 'T1.BBID'
from dual )
, table2(ID_BI2, KMFO) as ( select 1, 'T2.KMFO'
from dual union all select 3, 'T2.KMFO'
from dual )
----------------------------
select id, daid,caid, ID_BI2
     , CASE WHEN T1.DAID = 111111 THEN T1.BAID
            WHEN T1.CAID = 111111 AND T1.ID = T2.ID_BI2 THEN T2.KMFO
            WHEN T1.CAID = 111111 THEN T1.BBID
       END SAMEMFO_ORIG
     , CASE 111111
            WHEN T1.DAID THEN T1.BAID
            WHEN T1.CAID THEN coalesce(T2.KMFO, T1.BBID)
        END SAMEMFO_ANE
     , nvl(T2.KMFO,T1.BBID) as SAMEMFO_DSHEDOO
     , nvl2(T2.ID_BI2,T2.KMFO,T1.BBID) as SAMEMFO_DSHEDOO2
  FROM TABLE1 T1
  LEFT JOIN TABLE2 T2 ON T1.ID = T2.ID_BI2
 WHERE T1.DAID = 111111
    OR T1.CAID = 111111
;
        ID       DAID       CAID     ID_BI2 SAMEMFO_ORIG SAMEMFO_ANE SAMEMFO_DSHEDOO SAMEMFO_DSHEDOO2
---------- ---------- ---------- ---------- ------------ ----------- --------------- ----------------
         1     111111     222222          1 T1.BAID      T1.BAID     T2.KMFO         T2.KMFO
         3     222222     111111          3 T2.KMFO      T2.KMFO     T2.KMFO         T2.KMFO
         4     222222     111111            T1.BBID      T1.BBID     T1.BBID         T1.BBID
         2     111111     222222            T1.BAID      T1.BAID     T1.BBID         T1.BBID

SQL> 

...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770230
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
w31,

WHEN T1.CAID = 111111 THEN

заменить на ELSE

.....
stax
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770232
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousStaxи тд
Да.

... мой вариант корректировки case представлен для T2.KMFO not null, не надо инсинуаций :)
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770233
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxDshedoo
Код: plsql
1.
	nvl(T2.KACC,T1.ABNO) as SAMEACC,



CASE
WHEN T1.DAID = 111111 THEN T1.AANO
WHEN T1.CAID = 111111 AND T1.ID = T2.ID_BI2 THEN T2.KACC
WHEN T1.CAID = 111111 THEN T1.ABNO
END SAMEACC,


и тд
....
stax

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT
	[...],
	T1.AANO as SAMEACC,
        [...]
	FROM [...]
  WHERE	T1.DAID = 111111 
      AND [...]
union all
SELECT
       [...],
       nvl2(T2.ID_BI2,T2.KACC,T1.ABNO) as SAMEACC,
       [...],
       FROM [...]
  WHERE	T1.DAID != 111111 and T1.CAID = 111111
      AND [...]



NVL я заменил на NVL2, т.к. если T2.KACC is null, чтобы вернулся null.
...
Рейтинг: 0 / 0
Вопрос на интервью
    #39770236
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo
Код: plsql
1.
2.
3.
4.
5.
  WHERE	T1.DAID = 111111 
      AND [...]
union all
  WHERE	T1.DAID != 111111 and T1.CAID = 111111
      AND [...]



Тогда приводите решение целиком, фрагменты по умолчанию относятся к оригиналу.
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос на интервью
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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