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

Sumiranje po kriteriju, pomć

[es] :: MySQL :: Sumiranje po kriteriju, pomć

[ Pregleda: 2014 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MarkoBalkan

Član broj: 141124
Poruke: 1624
78.134.138.*



+19 Profil

icon Sumiranje po kriteriju, pomć22.11.2008. u 19:01 - pre 158 meseci
znaći imam tablicu

id,kolona1,kolona2,kolona3,indikator

indikator može biti 'a' ili 's'


select sum(a),sum(s) from
(
select sum(id) as a,sum(0) as s from prva where ind='a'
union
select sum(0) as a,sum(id) as s from prva where ind='s'
)


i dobijem, ako ne stavim prvi select

a,s

33,0
0,77

i sad još moram zbrojiti u svakoj koloni i dobiti 33, i dobiti 77.
ako stavim iznad select, dobijem grešku: Every derived table must have its own alias
greška 1248.




 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+709 Profil

icon Re: Sumiranje po kriteriju, pomć22.11.2008. u 19:53 - pre 158 meseci
Kao prvo, koristi code tag.

Kao drugo, jesi li siguran da ti treba suma id-jeva, tako nešto nema smisla?

Kao treće, odradi ono što ti error message savetuje, tj dodaj alias selectu:

Code:

select sum(a),sum(s) from
(
select sum(id) as a,0 as s from prva where ind='a'
union
select 0 as a,sum(id) as s from prva where ind='s'
) ovo_je_alias


A možeš koristiti i case (valjda svaka baza to podržava):
Code:

SELECT SUM(CASE ind WHEN 'a' THEN id ELSE 0 END), SUM(CASE ind WHEN 's' THEN id ELSE 0 END)
FROM prva
 
Odgovor na temu

MarkoBalkan

Član broj: 141124
Poruke: 1624
78.134.138.*



+19 Profil

icon Re: Sumiranje po kriteriju, pomć23.11.2008. u 11:00 - pre 158 meseci
Citat:
jablan: Kao prvo, koristi code tag.

Kao drugo, jesi li siguran da ti treba suma id-jeva, tako nešto nema smisla?

Kao treće, odradi ono što ti error message savetuje, tj dodaj alias selectu:

Code:

select sum(a),sum(s) from
(
select sum(id) as a,0 as s from prva where ind='a'
union
select 0 as a,sum(id) as s from prva where ind='s'
) ovo_je_alias


A možeš koristiti i case (valjda svaka baza to podržava):
Code:

SELECT SUM(CASE ind WHEN 'a' THEN id ELSE 0 END), SUM(CASE ind WHEN 's' THEN id ELSE 0 END)
FROM prva


ovo prvo ne radi kod mysql-a.
a drugo radi uredno.hvala.

a id sam stavio samo kao primjer.
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
91.150.127.*

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Sumiranje po kriteriju, pomć24.11.2008. u 08:30 - pre 158 meseci
Ja ovakve stvari radim sa IF: (kondicionalno sabiranje, ne sabiranje ID-ova)

Code:
SELECT SUM(IF(ind='a',id,0)), SUM(IF(ind='s',id,0)) FROM prva

"Common sense is not so common." - Voltaire
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15505
*.xdsl.beograd.com.

Sajt: mysql.rs


+2346 Profil

icon Re: Sumiranje po kriteriju, pomć24.11.2008. u 11:05 - pre 158 meseci
Citat:
MarkoBalkan: ovo prvo ne radi kod mysql-a.


RADI!!!

Code:

mysql> CREATE TABLE t1 (x int, y int) ENGINE=memory;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t1 VALUES (1,1), (2,1), (1, 2), (2, 2);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> SELECT SUM(tt.a), SUM(tt.b) FROM ( 
     -> (select sum(x) as a, 0 as b from t1 where y=1) 
     -> union 
     -> (select 0 as a, sum(x) as b from t1 where y=2)
     -> ) tt;
+-----------+-----------+
| sum(tt.a) | sum(tt.b) |
+-----------+-----------+
|         3 |         3 | 
+-----------+-----------+
1 row in set (0.00 sec)


I to je "pravi" nacin da se odradi posao .. ako koristis case/if i slicne "flow control statements" u 99% slucajeva radis "table scan" tako da je ovaj nacin xyz puta brzi
 
Odgovor na temu

[es] :: MySQL :: Sumiranje po kriteriju, pomć

[ Pregleda: 2014 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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