ďťż
 
ZLICZANIE W SELECT ďťż
 
ZLICZANIE W SELECT
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

ZLICZANIE W SELECT



SP - 28-08-2007 00:08
ZLICZANIE W SELECT
  Posiadam 2 tabele

OSOBA z polami
ID_OSOBA
IMIE
NAZWISKO

oraz WYNIKI z polami:
ID_OSOBA
ODP_UZYTKOW
IL_PUNKT_ODP

Chciałbym zrobić SELECT-a , który
1) zsumuje pole IL_PUNKT_ODP dla każdej osoby (to nie jest problem)
2) zliczy ile razy wystąpiła następująca zależność ODP_UZYTKOW=TRUE i
IL_PUNKT_ODP>0 lub ODP_UZYTKOW=FALSE i IL_PUNKT_ODP>0

czyli np.
ODP_UZYTKOW=TRUE IL_PUNKT_ODP = 5
ODP_UZYTKOW=TRUE IL_PUNKT_ODP = -5 (nie zliczaj)
ODP_UZYTKOW=FALSE IL_PUNKT_ODP = -5 (nie zliczaj)
ODP_UZYTKOW=FALSE IL_PUNKT_ODP = 5

pole zliczone=2
Poproszę o pomoc w zakodowaniu tego.





Jarek - 28-08-2007 00:08

  > Użytkownik "SP" <spytlik@interia.pl> napisał w wiadomości >
> news:1188238230.056636.116520@y42g2000hsy.googlegr oups.com...
> Posiadam 2 tabele
> OSOBA z polami
> ID_OSOBA
> IMIE
> NAZWISKO
>
> oraz WYNIKI z polami:
> ID_OSOBA
> ODP_UZYTKOW
> IL_PUNKT_ODP
>
> Chciałbym zrobić SELECT-a , który
> 1) zsumuje pole IL_PUNKT_ODP dla każdej osoby (to nie jest problem)
> 2) zliczy ile razy wystąpiła następująca zależność ODP_UZYTKOW=TRUE i
> IL_PUNKT_ODP>0 lub ODP_UZYTKOW=FALSE i IL_PUNKT_ODP>0

Powinno działać:

select
o.id_osoba,
(select sum(w.IL_PUNKT_ODP) from wyniki as w where w.id_osoba =
o.id_osoba ) as zlicz_true,
(select count(*) from wyniki as w where w.id_osoba = o.id_osoba and
w.ODP_UZYTKOW = true and w.IL_PUNKT_ODP>0) as zlicz_true,
(select count(*) from wyniki as w where w.id_osoba = o.id_osoba and
w.ODP_UZYTKOW = false and w.IL_PUNKT_ODP>0) as zlicz_false
from osoba as o

Oczywiście można zrobić to optymalniej. Składnia SQL-92 (np.MSSQL)

pozdr

Jarek




Marcin - 28-08-2007 00:08

  SP pisze:
> Posiadam 2 tabele
>
> OSOBA z polami
> ID_OSOBA
> IMIE
> NAZWISKO
>
> oraz WYNIKI z polami:
> ID_OSOBA
> ODP_UZYTKOW
> IL_PUNKT_ODP
>
> Chciałbym zrobić SELECT-a , który
> 1) zsumuje pole IL_PUNKT_ODP dla każdej osoby (to nie jest problem)
> 2) zliczy ile razy wystąpiła następująca zależność ODP_UZYTKOW=TRUE i
> IL_PUNKT_ODP>0 lub ODP_UZYTKOW=FALSE i IL_PUNKT_ODP>0
>
> czyli np.
> ODP_UZYTKOW=TRUE IL_PUNKT_ODP = 5
> ODP_UZYTKOW=TRUE IL_PUNKT_ODP = -5 (nie zliczaj)
> ODP_UZYTKOW=FALSE IL_PUNKT_ODP = -5 (nie zliczaj)
> ODP_UZYTKOW=FALSE IL_PUNKT_ODP = 5
>
> pole zliczone=2
> Poproszę o pomoc w zakodowaniu tego.
>

Ad. 2) Wg mnie to się sprowadza do warunku: il_punkt_odp > 0

w mysql można np. tak:

mysql> select count(
-> case
-> when il_punkt_odp > 0 then 1
-> end
-> ) as "pole zliczone"
-> from wyniki;
+---------------+
| pole zliczone |
+---------------+
| 2 |
+---------------+
1 row in set (0.00 sec)




SP - 28-08-2007 00:08

  Zapomniałęm napisać że chodzi od MS SQL
Dokładnie obenie mój select wygląda tak.

SELECT OSOBA.ID_OSOBA, OSOBA.IMIE, OSOBA.NAZWISKO, GRUPA.NAZWA,
COUNT(*) AS IL_POPR, SUM(WYNIKI.IL_PUNKT_ODP)
AS SUMA_PUNKTOW
FROM WYNIKI INNER JOIN
OSOBA ON WYNIKI.ID_OSOBA = OSOBA.ID_OSOBA INNER
JOIN
GRUPA ON OSOBA.ID_GRUPA = GRUPA.ID_GRUPA
WHERE (WYNIKI.ODP_UZYTKOW = 'TRUE') AND (WYNIKI.IL_PUNKT_ODP > 0)
OR
(WYNIKI.ODP_UZYTKOW = 'FALSE') AND
(WYNIKI.IL_PUNKT_ODP > 0)
GROUP BY OSOBA.ID_OSOBA, OSOBA.IMIE, OSOBA.NAZWISKO, GRUPA.NAZWA

Ale przy SUM sumuje tylko te które spełniają warunek WHERE a ja chcę
aby SUM-ował wszstkie. Jeszcze sprawdzę wasze odpowiedzi ze które
dziękuję.





Jarek Stokłosa - 28-08-2007 00:08

  >> Użytkownik "SP" <spytlik@interia.pl> napisał w wiadomości >>
>> news:1188242824.213475.56180@y42g2000hsy.googlegro ups.com...
>> Zapomniałęm napisać że chodzi od MS SQL
>> Dokładnie obenie mój select wygląda tak.

Poprawiony Select :

SELECT OSOBA.ID_OSOBA, OSOBA.IMIE, OSOBA.NAZWISKO, GRUPA.NAZWA,
COUNT(*) AS IL_POPR, SUM(case when (WYNIKI.ODP_UZYTKOW = 'TRUE') AND
(WYNIKI.IL_PUNKT_ODP > 0)
then WYNIKI.IL_PUNKT_ODP else 0 end) AS SUMA_PUNKTOW_TRUE,
SUM(case when (WYNIKI.ODP_UZYTKOW = 'FALSE') AND (WYNIKI.IL_PUNKT_ODP > 0)
then WYNIKI.IL_PUNKT_ODP else 0 end) AS SUMA_PUNKTOW_FALSE
FROM WYNIKI INNER JOIN
OSOBA ON WYNIKI.ID_OSOBA = OSOBA.ID_OSOBA INNER
JOIN
GRUPA ON OSOBA.ID_GRUPA = GRUPA.ID_GRUPA
WHERE (WYNIKI.ODP_UZYTKOW = 'TRUE') AND (WYNIKI.IL_PUNKT_ODP > 0)
OR
(WYNIKI.ODP_UZYTKOW = 'FALSE') AND
(WYNIKI.IL_PUNKT_ODP > 0)
GROUP BY OSOBA.ID_OSOBA, OSOBA.IMIE, OSOBA.NAZWISKO, GRUPA.NAZWA

pozdr

Jarek




SP - 29-08-2007 00:10

  Dziękuję
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [help] Illustrator CS - =?ISO-8859-2?Q?znikn=B1=B3_Selection_?==?ISO-8859-2?Q?Tool_=28V=29?= [mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu. SELECT MAX(nazwaPola) FROM tabela WHERE .... i ORA-01405: pobran? warto?ci? kolumny jest NULL =?iso-8859-2?q?select_sum_i_dwie_tabele..._b=B3=EAdna_agregac ja?= =?iso-8859-2?Q?=5BMySql=5D_-_select_po_5_rekordow_mniejssych_i_wi=EAkszych?= =?iso-8859-2?Q?=5BMySql=5D_Select_wed=B3ug_nazwy_pola?= =?ISO-8859-2?Q?[mysql]_Nie_potrafi=EA_zgrupowa=E6_selecta_(proste)?= =?ISO-8859-2?Q?[MS_SQL]_update_wielu_p=F3l_na_raz_z_selecta?= Wstawianie nowego wiersza w przypadku jego braku podczas SELECT w PostgreSQL [pgsql] jak =?ISO-8859-2?Q?zrobi=E6_taki_select_=3F?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • felgiuzywane.xlx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com