1

Temat: sum(pole) dla 22 różnych id

Witam,

mam 2 tabele

----tab1
id_tab1
pole
id_tab2 - z tab2

oraz
---tab2
id_tab2
jakas_nazwa

mam id_tab2 od 1-22 i potrzebuję obliczyć sum(pole) z tab1 biorąc pod uwagę, że id_tab2=1 i id_tab2=2 ... aż do id_tab2=22

1. czy można to zrobić jednym zapytaniem czy trzeba aż 22 zapytania?
2. czy można by było po wykonaniu p1 dołączyć do wyniku sum nazwę pola z tab2 pt jakas_nazwa - podejrzewam, że tutaj bez crosstab się nie obejdzie.

pozdrawiam.

2

Odp: sum(pole) dla 22 różnych id

Może coś takiego:

Select
    sum(pole),
    (Select jakas_nazwa From tab2 Limit 1) AS jakas_nazwa
From tab1
Where id_tab2 Between 1 And 22

Nie bardzo widzę jak to jest przechowywane, czy np. w tab2 znajdują się 22 wiersze (od 1 do 22) i TA sama wartość jakas_nazwa dla każdego z nich. Na własne potrzeby z tego co zrozumiałem z treści wynika taki DDL+DML:

Create Table tab2 (
    id_tab2 integer Primary Key,
    jakas_nazwa text
);
Create Table tab1 (
    id_tab1 integer Primary Key,
    pole integer,
    id_tab2 integer References tab2(id_tab2)
);
Insert into tab2 select id, 'jakas wartosc' from generate_series(1, 22) id;
Insert into tab1 select id,  trunc(random()*100 + 1), id from generate_series(1, 22) id;

3

Odp: sum(pole) dla 22 różnych id

w wyniku otrzymałem tylko jedną odpowiedź:

1189 jakas wartosc

a tymczasem ja chcę otrzymać:

suma_id1 ; suma_id2 ; .... ; suma_id22

8; 14;....;33

przy czym suma_id1 - dla id_tab2=1, suma_id2 - dla id_tab2=2 i tak do 22

jakas_nazwa jest niepowtarzalna stąd 22 różne id.

w warunku należy dołożyć dodatkowe id_gat_drzewa znajdujące się w tab1 i dla tego konkretnego id_gat_drzewa chciałbym obliczyć sumy wartości dla różnych kategorii ponieważ nie dla każdego id_tab2 ta suma będzie większa od 0 to ograniczę sobie wyniki oraz dalsze już w ramach tej sumy > 0 zapytanie.

czy można to zrobić 1 zapytaniem czy sprawdzać po kolei od 1 do 22?

4

Odp: sum(pole) dla 22 różnych id

Create Table tab2 (
    id integer Primary Key,
    nazwa text
);
Create Table tab1 (
    id integer Primary Key,
    pole integer,
    id_tab2 integer References tab2
);

Ostatnio edytowany przez gszpetkowski (2011-11-23 00:17:55)

5

Odp: sum(pole) dla 22 różnych id

Odnawiam temat gdyż potrzebuję (nie mogę sobie poradzić) bardziej skomplikowany wynik:

w tabeli tab1 dokładamy pole warunek (zakres wartości od 1-7)

drop table tab1;
Create Table tab1 (
    id integer Primary Key,
    pole integer,
    id_tab2 integer References tab2,
    warunek integer
);

Insert Into tab1
    Select -- ew. można załatwić to jednym rand'em
        id, trunc(random()*100 + 1),
        trunc(random()*22 + 1),
        trunc(random()*7 + 1)
    From generate_series(1, 22*3) id;

Potrzebuję pobrać dane w postaci (odpowiedź gszpetkowski)

Select
    id_tab2, sum(pole),
    (Select nazwa From tab2 Where id = id_tab2) As nazwa
From tab1
Where id_tab2 Between 1 And 22
Group By id_tab2
Order By id_tab2;

tak aby wynik był w postaci

Przykładowy wynik:
id_tab2 | sum | nazwa | warunek2|warunek3|warunek4|warunek5|warunek6|warunek7
---------+-----+-------+-----+-----+-----+-----+-----+-----+
       1 | 151 | aaaa| 0 | 2 | 0 | 7 | 0 | 0
       2 |  57 | bbbb | 3 | 0 | 0 | 0 | 0 | 8

czyli sum jest sumą bez względu na warunek natomiast osobno potrzebuję zliczyć sumy dla warunku=2 lub warunku=3 aż do warunku=7