Article View: pl.comp.bazy-danych
Article #195455Re: Funkcje WINDOW
From: Andrzej Stróżyński
Date: Tue, 28 Nov 2017 10:13
Date: Tue, 28 Nov 2017 10:13
92 lines
3831 bytes
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-mailReferences:
<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