|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
hi all Дано: таблица `t2` с двумя int-полями: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Запрос-1: Код: sql 1.
Запрос-2: Код: sql 1.
Результат запроса-1 в Oracle 11.2.g по неведомым причинам содержит NULL'ы в sum()over(): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Результат запроса-2 этого уже не содержит: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Для сравнения, результаты запроса-1 в других СУБД: Firebird 3.0: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
MS SQL 2008: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 17:50 |
|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
Таблоид, postgresql 9.3 Код: sql 1.
30490471411452284104244464 Код: sql 1.
304904714114522108642 наверное разное дефолтное NULLS FIRST|LAST в разных субд ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 17:59 |
|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
Таблоид, А почему не должен? Код: 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.
а в документации написано:NULLS LAST is the default for ascending order, and NULLS FIRST is the default for descending order. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 18:05 |
|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
я сравнил еще результаты без всякого упоминания nulls first / last. Вот для sum(x)over(order by x ASCENDING):over(order by x asc)QueryIDXSFirebird 3.0with recursive2nullnullr as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)4nullnull,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)6nullnullselect id,x,sum(x)over(order by x) s from t8nullnullorder by x,id;10nullnull300900112712524MS SQL 2008with idxsr as(select 1 id union all select r.id+1 from r where r.id<10)2NULLNULL,t as(select id,iif(id%2<>0,id%3,null) x from r)4NULLNULLselect id,x,sum(x)over(order by x ) s from t 6NULLNULLorder by x,id8NULLNULL10NULLNULL300900112712524ORA 11.2 gwithIDXSr as(select level+1 id from dual connect by level<10)300,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)900select id,x,sum(x)over(order by x) s from t 711order by x,id;5232***null***34***null***36***null***38***null***310***null***3 И вот для sum(x)over(order by x DESCENDING):over(order by x desc)QueryIDXSFirebird 3.0with recursive2null4r as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)4null4,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)6null4select id,x,sum(x)over(order by x desc) s from t8null4order by x,id;10null4304904114714522MS SQL 2008with idxsr as(select 1 id union all select r.id+1 from r where r.id<10)2NULL4,t as(select id,iif(id%2<>0,id%3,null) x from r)4NULL4select id,x,sum(x)over(order by x desc) s from t 6NULL4order by x,id8NULL410NULL4304904114714522ORA 11.2 gwithIDXSr as(select level+1 id from dual connect by level<10)303,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)903select id,x,sum(x)over(order by x desc) s from t 713order by x,id;5222***null******null***4***null******null***6***null******null***8***null******null***10***null******null*** Чё-то настораживает, что в Оракле не сходится ни с чем: ни с MS, ни с PG, ни с FB... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 18:30 |
|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
Пардон, в предыдущем посте ошибка в оракловом варианте запроса. в топку его. Вопрос на самом деле вот какой: почему результаты в ФБ и в Оракле хотя и совпадают, выглядят "перевёрнутыми" друг отн. друга ?DBMSQueryIDXSDBMSIDXSFirebird 3.0with recursive2null4ORA 11.2 gwith300order by x asc nulls lastr as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)4null4order by x asc nulls lastr as(select level id from dual connect by level<=10)900,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)6null4,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)112select id,x,sum(x)over(order by x nulls last) s from t8null4select id,x,sum(x)over(order by x nulls last) s from t712order by x,id;10null4order by x,id;5243002***null***49004***null***41126***null***47128***null***452410***null***4Firebird 3.0with recursiveIDXSORA 11.2 gwithIDXSorder by x asc, nulls firstr as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)2nullnullorder by x asc, nulls firstr as(select level id from dual connect by level<=10)300,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)4nullnull,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)900select id,x,sum(x)over(order by x nulls first) s from t6nullnullselect id,x,sum(x)over(order by x nulls first) s from t112order by x,id;8nullnullorder by x,id;71210nullnull5243002***null******null***9004***null******null***1126***null******null***7128***null******null***52410***null******null***Firebird 3.0with recursiveIDXSORA 11.2 gwithIDXSorder by x desc, nulls lastr as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)2null4order by x desc, nulls lastr as(select level id from dual connect by level<=10)304,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)4null4,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)904select id,x,sum(x)over(order by x desc nulls last) s from t6null4select id,x,sum(x)over(order by x desc nulls last) s from t114order by x,id;8null4order by x,id;71410null45223042***null***49044***null***41146***null***47148***null***452210***null***4Firebird 3.0with recursiveIDXSORA 11.2 gwithIDXSorder by x desc, nulls firstr as(select 1 id from rdb$database union all select r.id+1 from r where r.id<10)2nullnullorder by x desc, nulls firstr as(select level id from dual connect by level<=10)304,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)4nullnull,t as(select id,case when mod(id,2)<>0 then mod(id,3) else null end x from r)904select id,x,sum(x)over(order by x desc nulls first) s from t6nullnullselect id,x,sum(x)over(order by x desc nulls first) s from t114order by x,id;8nullnullorder by x,id;71410nullnull5223042***null******null***9044***null******null***1146***null******null***7148***null******null***52210***null******null*** ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 18:57 |
|
Что у вас показывает sum( X )over(order by X), когда в столбце 'X' есть NULL'ы ?
|
|||
---|---|---|---|
#18+
Таблоид, ты читаешь, что тебе выше пишут? Сергей Арсеньев вроде ответил уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 19:09 |
|
|
start [/forum/topic.php?fid=35&msg=38584441&tid=1552388]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 237ms |
total: | 357ms |
0 / 0 |