SQL baze podataka - Sponzor: Baze-Podataka.net MySQL, MSSQL, Oracle, Access, ODBC. Ako imate problem brže i preciznije ćete dobiti odgovor ako priložite strukturu tabela ili skript koji kreira tabele i puni ih test podacima umesto što to problem opisujete samo rečima. Sponzor: Baze-Podataka.net - Blog o bazama podataka |
![]() |
|
Alati teme | Način prikaza |
![]() |
#1 |
profesionalac
Qualified
Datum učlanjenja: 22.09.2007
Lokacija: Split
Poruke: 111
Hvala: 8
39 "Hvala" u 10 poruka
![]() |
![]() Prvo se isprićavam na naslovu poruke, nisam mogao ništa pametnije smisliti.
Ima tablicu koja ima sljedeća polja; ID, DATE, CIJENA1, CIJENA2 Sa upitom: SELECT YEAR(date), COUNT(date) FROM table WHERE cijena1 < cijena2 GROUP BY YEAR(date); Dobijem po godina koliko je puti cijena2 bila veća od cijene1 evo ispisa: +------------+-------------+ | YEAR(date) | COUNT(date) | +------------+-------------+ | 1999 | 118 | | 2000 | 126 | | 2001 | 117 | | 2002 | 115 | | 2003 | 111 | | 2004 | 112 | | 2005 | 139 | | 2006 | 126 | | 2007 | 119 | | 2008 | 115 | | 2009 | 128 | | 2010 | 124 | +------------+-------------+ A ja bi sada htio da tu bude i treći stupac, u kojem će pisati ukupan broj cijene1 ili cijene2 (uglavnom svaki datum ima oba dvije cijene) Znaći imao bi npr. | 1999 | 118 | 250 gdje je 250 ukupan broj cijena za 1999 godinu. Pokušavao sam napraviti ali bez uspijeha. Radim na MySQL-u Hvala |
![]() |
![]() |
![]() |
#2 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Nemam MySQL, ali bi trebalo da možeš sa:
Kôd:
SELECT YEAR(date), COUNT(*), SUM( CASE WHEN cijena1 < cijena2 THEN 1 ELSE 0 END ) FROM table GROUP BY YEAR(date);
__________________
blog |
![]() |
![]() |
![]() |
#3 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Ja ne kontam, možeš li postaviti dump par redova iz tabele? I kako si dobio 118 i 250 za 1999 godinu ako ima više redova?
|
![]() |
![]() |
![]() |
#4 | |
Иван Бишевац
Qualified
|
![]() Citat:
Него један савет за Мишка. Кад стављаш питање постави и дамп базе да би могли да ти помогнемо. Овако морао сам да креирам табелу, да убацим тест податке па тек онда да пишем упит. Значи ако користиш воркбеч имаш тамо опцију да извезеш само једну табелу тако да поставиш тај извезени .sql фајл. Поздрав. |
|
![]() |
![]() |
![]() |
#5 |
Super Moderator
Invented the damn thing
Datum učlanjenja: 06.06.2005
Poruke: 2.371
Hvala: 370
701 "Hvala" u 194 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Mislim da bi umesto onog case-a mogao da stoji i IF.
Kôd:
SELECT YEAR(date), COUNT(date), SUM(IF(cijena1 < cijena2, 1, 0)) FROM table GROUP BY YEAR(date); |
![]() |
![]() |
"Hvala" dinke za poruku: |
![]() |
#6 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Može da se napravi i rešenje bez CASE/IF, zasnovano na JOIN-u:
Kôd:
SELECT YEAR(t1.date), COUNT(t1.id), COUNT(t2.id) FROM table t1 LEFT JOIN table t2 ON t1.id = t2.id AND t2.cijena1 < t2.cijena2 GROUP BY YEAR(t1.date);
__________________
blog |
![]() |
![]() |
"Hvala" jablan za poruku: |
![]() |
Alati teme | |
Način prikaza | |
|
|