[ djblade @ 28.03.2007. 06:27 ] @
| Imam sljedeci query sa kojim pokusavam da izracunam procente
SELECT ((SELECT COUNT(value) FROM exponate WHERE value >=30 AND value <=50)/COUNT(e.value))*100 FROM exponate e
problem je sto uvijek dobijem 0 ?!?!?!
kada rastavim query dobijem sljedece vrijednosti
SELECT COUNT(value) FROM exponate WHERE value >=30 AND value <=50 ---- 1
COUNT(e.value) ---- 4
treba da dobijem
(1/4)*100 = 25
ali zastoo ne dobijammm? :D
hvala i pozdravi |
[ chachka @ 28.03.2007. 07:29 ] @
Treba ti nesto poput
Code:
SELECT (SELECT COUNT(value)
FROM exponate
WHERE value >= 30
AND value <= 50)
/
(SELECT COUNT(value)
FROM exponate)
*
100
FROM neka_tabela_sa_samo_jednim_redom
Za Oracle neka_tabela_sa_samo_jednim_redom = DUAL
Za PostgreSQL moze da se izosatavi kompletna FROM klauzula
Sledeci kod je uopsten, koristi privremenu tabelu i radi na vecini sistema:
Code:
SELECT SUM(t.b) / SUM(t.i) * 100
FROM (SELECT COUNT(value) AS b, 0 AS i
FROM exponate
WHERE value >= 30
AND value <= 50
UNION ALL
SELECT 0 AS b, COUNT(value) AS i
FROM exponate
) AS t
[ inherited @ 28.03.2007. 12:11 ] @
Imam ovako varijantu:
+---------------+
|godina|vrednost|
+---------------+
|2006 | 1000,00|
|2006 | 1200,00|
|2006 | 1250,00|
|2006 | 2000,00|
|2006 | 800,00|
|2006 | 2500,00|
|2006 | 2300,00|
|... | |
|2006 | 1850,00|
+---------------+
treba mi varijanta da se sabere kolona "vrednost" i da se za svaku kolonu
napravi jos jedna gde ce biti prikazan % od ukupne sume?
+---------------+--------+
|godina|vrednost|procenat|
+---------------+--------+
|2006 | 1000,00|
|2006 | 1200,00|
|2006 | 1250,00|
|2006 | 2000,00|
|2006 | 800,00|
|2006 | 2500,00|
|2006 | 2300,00|
|... | |
|2006 | 1850,00|
+---------------+
[ Zidar @ 28.03.2007. 17:50 ] @
@ Djblade: Hoce ponekad kad imas dva INTEGER podatka, intA <i ntB, pa podelis (intaA/intB ) da dobijes nulu (zero, 0), ako je rezultat manji od jedinice. Onda moze da pomogne ili nesto kao CAST (intaA as FLOAT), ili da u racunskoj operaciji upotrebis decimalan broj, na primer (1.0*intA/intB). Primeti da sam stavio 1.0 a ne 1, to bi trebalo da 'decimalizuje'

ceo rezultat.
[ djblade @ 28.03.2007. 20:08 ] @
Citat:
Zidar: @ Djblade: Hoce ponekad kad imas dva INTEGER podatka, intA <i ntB, pa podelis (intaA/intB ) da dobijes nulu (zero, 0), ako je rezultat manji od jedinice. Onda moze da pomogne ili nesto kao CAST (intaA as FLOAT), ili da u racunskoj operaciji upotrebis decimalan broj, na primer (1.0*intA/intB). Primeti da sam stavio 1.0 a ne 1, to bi trebalo da 'decimalizuje' :-) ceo rezultat.
dobra ideja :D
pokusao sam
SELECT (1.0*(SELECT COUNT(value) FROM exponate WHERE value >=30 AND value <=50)/COUNT(e.value))*100 FROM exponate e
i dobijem 20.0 iako bi trebao dobiti 25.0?!?!
pokusat cu veceras u ovo
Citat:
inherited: Imam ovako varijantu:
+---------------+--------+
|godina|vrednost|procenat|
+---------------+--------+
|2006 | 1000,00|
|2006 | 1200,00|
|2006 | 1250,00|
|2006 | 2000,00|
|2006 | 800,00|
|2006 | 2500,00|
|2006 | 2300,00|
|... | |
|2006 | 1850,00|
+---------------+
hvala i pozdravi
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.