[ MarkoBalkan @ 22.11.2008. 19:01 ] @
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.




[ jablan @ 22.11.2008. 19:53 ] @
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
[ MarkoBalkan @ 23.11.2008. 11:00 ] @
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.
[ Shinhan @ 24.11.2008. 08:30 ] @
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
[ bogdan.kecman @ 24.11.2008. 11:05 ] @
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