|
[ 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 ] @
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
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|