Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Računanje/grupisanje nepostojećeg podatka

[es] :: MySQL :: Računanje/grupisanje nepostojećeg podatka

[ Pregleda: 12868 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Računanje/grupisanje nepostojećeg podatka11.12.2016. u 09:33 - pre 136 dana i 11h
Imam tabelu u kojoj se između ostalog nalazi i zarada koju želim da izračunam po mjesecima. Sljedeći upit radi sve što tražim osim jedne sitnice. Za oktobar prosto nema zarade i onda mi ne vraća ništa za taj mjesec, a ja želim da mi vrati 0 ili NULL ili bilo šta na osnovu čega bi ja poslije mogao da u grafikonu koji crtam zbodem 0.

Code:
SELECT ROUND(SUM(revenue))
FROM order
WHERE DATE(order_date) BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), "%Y-%m-01") AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
GROUP BY MONTH(order_date)
ORDER BY order_date;

Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4306



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka11.12.2016. u 13:45 - pre 136 dana i 7h
date tabela obično rešava sve slične probleme.
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 08:32 - pre 135 dana i 13h
Ali ne želim da je imam...
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2050



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 10:08 - pre 135 dana i 11h
Code (sql):

SELECT mymonth, ROUND(SUM(revenue))
FROM ( SELECT MONTH(order_date) AS mymonth, revenue
       FROM ORDER
       WHERE DATE(order_date) BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), "%Y-%m-01") AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
       UNION SELECT 1, 0
       UNION SELECT 2, 0
       UNION SELECT 3, 0
       UNION SELECT 4, 0
       UNION SELECT 5, 0
       UNION SELECT 6, 0
       UNION SELECT 7, 0
       UNION SELECT 8, 0
       UNION SELECT 9, 0
       UNION SELECT 10, 0
       UNION SELECT 11, 0
       UNION SELECT 12, 0
     )    
GROUP BY mymonth
ORDER BY mymonth;
 
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 10:49 - pre 135 dana i 10h
Hm, ovo radi što se tiče mjeseci, ali mi ne računa zaradu ukupno za svaki mjesec kako treba...
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 2050



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 11:09 - pre 135 dana i 10h
Možda ti ranije nije računao zaradu kako treba. Ja nisam ništa promenio, osim što sam dodao za svaki mesec po jednu stavku da bi se pojavio svaki mesec u izveštaju.

Inače je jako loša praksa da radiš GROUP BY, a da ne selektuješ podatak po kome si radio grupisanje.
Druga loša praksa kod onih koji rade sa MySQL-u je da u select stave i nešto što nije agregatna funkcija ili podatak po kojem se grupiše.
A i pitanje je šta radi ono ORDER BY order-date. Ti nigde ne selektuješ taj podatak, u sumu po jednom mesecu može da uđe više različitih order-date, pa po čemu se onda sortira?
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4306



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 13:01 - pre 135 dana i 8h
Citat:
Tyler Durden:
Ali ne želim da je imam...

Skroz ok, samo sam radoznao da čujem rezonovanje.
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 14:38 - pre 135 dana i 6h
@jablan
ovo nije neki super bitan izvjestaj koji apsolutno mora da se prikaze i onda mi je bezveze da pravim dodatnu tabelu samo zarad jedne stvari koji i nije toliko vazna.
s druge strane, dodatna tabela ipak pravi neku dodatnu kompleksnost u bazi, makar u smislu dokumentovanja i pamcenja "a cemu ono bjese ova tabela sluzi...?" koju bih da izbjegnem.
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4306



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 15:23 - pre 135 dana i 6h
ok.. čudi me da nisi ranije naišao na sličan problem. ova tabela obično pojednostavi masu upita, posebno ako u igru uđu i kalkulacije sa radnim/neradnim danima i praznicima.

inače, i ja mysql ne volim iz sličnog razloga koji i djoka navodi - vrlo "liberalan" sql gaji loše navike. :/
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 14115
*.com
Via: [es] mailing liste

Sajt: mysql.rs


Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 15:34 - pre 135 dana i 5h
@jablan, default sql_mode na 5.7 vec ukida mnogo liberalnosti a na 8.0
su limiti jos ozbiljniji :D

@tyler, ako se drndas sa izvestajima iz sql-a tabele sa datumima su
nuzno zlo, tabela sa mesecima, tabela sa danima za celu godinu (pa tu
oznacis radne, neradne, poluradne..) i slicno .. bez toga je veliki broj
izvestaja muka
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 20:38 - pre 135 dana
Citat:
djoka_l:
Možda ti ranije nije računao zaradu kako treba. Ja nisam ništa promenio, osim što sam dodao za svaki mesec po jednu stavku da bi se pojavio svaki mesec u izveštaju.

Ne, definitivno nešto nije u redu. Provjerio sam pojedinačno po mjesecima i ni jedan ni približno dobro nije izračunat :-/
Mada nema veze toliko. Srediću to kroz kod. Mislio sam da postoji neki elegantniji način kroz bazu.

Citat:
Inače je jako loša praksa da radiš GROUP BY, a da ne selektuješ podatak po kome si radio grupisanje.

Hoćeš da kažeš da sam trebao da uradim SELECT booking_date, ROUND(SUM(commission)) FROM... u mom orginalnom upitu? A zašto je to tako? Taj podatak o mjesecu po kojem vršim grupisanje mi ništa konkretno ne znači. Je l' to usporava upit?

Citat:
Druga loša praksa kod onih koji rade sa MySQL-u je da u select stave i nešto što nije agregatna funkcija ili podatak po kojem se grupiše.

Ali ovo nisam uradio?

Citat:
A i pitanje je šta radi ono ORDER BY order-date. Ti nigde ne selektuješ taj podatak, u sumu po jednom mesecu može da uđe više različitih order-date, pa po čemu se onda sortira?

Pa po tom mjesecu kome pripada grupa order_date-ova ako mogu tako da se izrazim?


[Ovu poruku je menjao Tyler Durden dana 12.12.2016. u 22:05 GMT+1]
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

Living Light
Behind the soldering iron

Član broj: 331540
Poruke: 1590
*.dynamic.isp.telekom.rs.



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 21:10 - pre 135 dana
Citat:
X Files: Šta ti je život, došlo vreme da kosmopolite DaliborP & Tyler Durden opisuju diskutante :)
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4306



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka12.12.2016. u 21:40 - pre 134 dana i 23h
Citat:
Tyler Durden:
Mada nema veze toliko. Srediću to kroz kod. Mislio sam da postoji neki elegantniji način kroz bazu.

Uf čoveče ako je tebi jednostavnije da budžiš kroz kod ili praviš 12 unija u svakom upitu u kome ti trebaju svi meseci redom, nego da dodaš jednu tabelu jednom, onda stvarno...

:/
 
Odgovor na temu

plague
Software Developer
Auckland, NZ

Član broj: 46734
Poruke: 562
*.vocus.co.nz.



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka13.12.2016. u 01:59 - pre 134 dana i 19h
@Tyler Durden Verovatno imas duplirane podatke koje UNION procisti. Probaj sa modifikovanim @djoka_l upitom:

Code (sql):

SELECT mymonth, ROUND(SUM(revenue))
FROM ( SELECT MONTH(order_date) AS mymonth, revenue
       FROM ORDER
       WHERE DATE(order_date) BETWEEN DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 YEAR), "%Y-%m-01") AND LAST_DAY(DATE_SUB(CURDATE(), INTERVAL 1 MONTH))
       UNION ALL SELECT 1, 0
       UNION ALL SELECT 2, 0
       UNION ALL SELECT 3, 0
       UNION ALL SELECT 4, 0
       UNION ALL SELECT 5, 0
       UNION ALL SELECT 6, 0
       UNION ALL SELECT 7, 0
       UNION ALL SELECT 8, 0
       UNION ALL SELECT 9, 0
       UNION ALL SELECT 10, 0
       UNION ALL SELECT 11, 0
       UNION ALL SELECT 12, 0
     )    
GROUP BY mymonth
ORDER BY mymonth;
 
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka13.12.2016. u 10:30 - pre 134 dana i 11h
Citat:
jablan:
Citat:
Tyler Durden:
Mada nema veze toliko. Srediću to kroz kod. Mislio sam da postoji neki elegantniji način kroz bazu.

Uf čoveče ako je tebi jednostavnije da budžiš kroz kod ili praviš 12 unija u svakom upitu u kome ti trebaju svi meseci redom, nego da dodaš jednu tabelu jednom, onda stvarno...

:/


Možda nisam dovoljno objasnio koliko je ovaj upit (ne)bitan dio koda, odnosno onoga što je potrebno da se uradi. Ali napisao sam da je ovo jedini slučaj i jedan jedini upit gdje se ukazala potreba za takvom tabelom. Takođe, ne namjeravam da napravim 5 klasa sa po 15 metoda kako bi ovo nabudžio kroz kod, jelte....
Može li neko drugi da se izjasni povodom ovog "filozofskog" pitanja?
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
188.117.232.*



Profil

icon Re: Računanje/grupisanje nepostojećeg podatka13.12.2016. u 10:33 - pre 134 dana i 10h
bravo @plague
radi sa ovim promjenama!
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

[es] :: MySQL :: Računanje/grupisanje nepostojećeg podatka

[ Pregleda: 12868 | Odgovora: 15 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.