🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.bazy-danych
Article #195455

Re: Funkcje WINDOW

#195455
From: Andrzej Stróżyński
Date: Tue, 28 Nov 2017 10:13
92 lines
3831 bytes
W dniu 2017-11-28 o 10:17, Roman Tyczka pisze:
> On Tue, 28 Nov 2017 08:15:33 +0100, Andrzej Stróżyński wrote:
> 
>> W dniu 2017-11-27 o 22:17, Roman Tyczka pisze:
>>> On Mon, 27 Nov 2017 22:10:32 +0100, Andrzej Stróżyński wrote:
>>>
>>>>>>> SELECT A, B, C,
>>>>>>>      SUM(C) OVER (),
>>>>>>>      SUM(C) OVER (ORDER BY A, B),
>>>>>>>      SUM(C) OVER (PARTITION BY A),
>>>>>>>      SUM(C) OVER (PARTITION BY A ORDER BY B)
>>>>>>>      FROM TEST
>>>>>>>
>>>>>>> i wyniki:
>>>>>>>
>>>>>>> A|  B|   C|  SUM| SUM_1| SUM_2| SUM_3|
>>>>>>> -------------------------------------
>>>>>>> 1|  1|  30|  141|    30|    60|    30|
>>>>>>> 1|  2|  20|  141|    50|    60|    50|
>>>>>>> 1|  3|  10|  141|    60|    60|    60|
>>>>>>> 2|  1|  25|  141|    85|    40|    25|
>>>>>>> 2|  2|  15|  141|   100|    40|    40|
>>>>>>> 3|  1|  41|  141|   141|    41|    41|
>>>>>>>
>>>>>>
>>>>>> Wnioskuję wyłącznie z obserwacji Twojego wyniku:
>>>>>> ORDER BY powoduje sumowanie narastająco.
>>>>>> SUM_3 jest partycjonowane więc licznik zeruje się przy zmianie wartości
>>>>>> partycjonującej.
>>>>>
>>>>> czyli ORDER BY odcina z sumy wiersze, to dość nieoczywiste dla mnie i
>>>>> trochę nieintuicyjne
>>>>
>>>> Odcina PARTITION BY.
>>>> ORDER BY decyduje o kolejności sumowania wewnątrz partycji.
>>>    
>>> Ale czekaj... kolumna SUM_1 pochodzi z SUM(C) OVER (ORDER BY A, B) a tu nie
>>> ma PARTITION. Co zatem ucina sumę do raptem jednego wiersza z wartością 30?
>>
>> No właśnie nic tu nie ucina (nie zeruje) wyniku w trakcie sumowania.
>> Zaczyna od 0 i sumuje narastająco kolejne wiersze wg zadanej kolejności.
> 
> Ok, to ma sens, ale w takim razie gdy zrobiłem jak prosiłeś order by C i
> wyszło:
> 
> 10
> 30
> 60
> 15
> 40
> 41
> 
> to jak to powstało?
> kolumna C posortowana wygląda tak:
> 
> 10
> 15
> 20
> 25
> 30
> 41
> 
> zatem narastająca suma powinna wyjść:
> 
> 10
> 25
> 45
> 70
> 100
> 141
> 
> czyli inaczej, skąd ta różnica?

z PARTITION BY A, które po pierwsze, niejawnie, wymusza najpierw order 
by A, po drugie, zeruje sumę przy zmianie wartości A.
(PARTITION BY A ORDER BY C) daje kolejność jak ORDER BY A, C
czyli mamy:

A  B   C	SUM
1  3  10	 10
1  2  20	+20=30
1  1  30	+30=60
2  2  15	 15	-> zmiana wartości A więc zaczynamy od 0
2  1  25	+25=40
3  1  41	 41	-> zmiana wartości A więc zaczynamy od 0

i wszystko się zgadza.


-- 
pozdrawiam
AS
Technical Details
Message-ID: <5a1d36ca$0$647$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <1qtlvdtvwd3ib.dlg@tyczka.com> <5a1c7431$0$15206$65785112@news.neostrada.pl> <1a1wy99wmetn2$.dlg@tyczka.com> <5a1c7f47$0$645$65785112@news.neostrada.pl> <15wzhnp7549o5.dlg@tyczka.com> <5a1d0d14$0$658$65785112@news.neostrada.pl> <r7iqiadu4oo0$.dlg@tyczka.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!news.nask.pl!news.nask.org.pl!news.unit0.net!peer01.am4!peer.am4.highwinds-media.com!peer04.fr7!futter-mich.highwinds-media.com!news.highwinds-media.com!newsfeed.neostrada.pl!unt-exc-02.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Subject: Re: Funkcje WINDOW
Newsgroups: pl.comp.bazy-danych
References: <1qtlvdtvwd3ib.dlg@tyczka.com> <5a1c7431$0$15206$65785112@news.neostrada.pl> <1a1wy99wmetn2$.dlg@tyczka.com> <5a1c7f47$0$645$65785112@news.neostrada.pl> <15wzhnp7549o5.dlg@tyczka.com> <5a1d0d14$0$658$65785112@news.neostrada.pl> <r7iqiadu4oo0$.dlg@tyczka.com>
From: Andrzej Stróżyński
 <astrozynski@poczta_dot_onet.pl>
Date: Tue, 28 Nov 2017 11:13:31 +0100
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0
MIME-Version: 1.0
In-Reply-To: <r7iqiadu4oo0$.dlg@tyczka.com>
Lines: 92
Message-ID: <5a1d36ca$0$647$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 80.53.153.108
X-Trace: 1511864010 unt-rea-b-01.news.neostrada.pl 647 80.53.153.108:50755
X-Complaints-To: abuse@news.neostrada.pl
X-Received-Body-CRC: 3082434149
X-Received-Bytes: 3749
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit