ďťż
 
Grupowanie statystyczne ďťż
 
Grupowanie statystyczne
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

Grupowanie statystyczne



bebop - 25-03-2006 01:20
Grupowanie statystyczne
  Witam

zmagam sie z zadaniem i proslbym o wskazowki dotyczace rozwiazania.

tabela posiada 2 kolumny ID oraz ILOSC_OSOB_W_PRZEDSIEBIORSTWIE.
wartosci sa wygenerowane losowo i chcilabym przeprowadzic na nich
badanie statystyczne.

zapytanie:
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM KLASYFIKACJA_CECHY_ZMIENNEJ
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1 AND 50;

zwraca oczywiscie jedna linie, w jaki sposob uzyskac odpowiedz
pogrupowa na przedzialy np
1-50, 50-100, 100-150, 150 i wiecej ?

--
pozdrawiam
Piotrek





max - 25-03-2006 01:20

  bebop napisał(a):
> Witam
>
> zmagam sie z zadaniem i proslbym o wskazowki dotyczace rozwiazania.
>
> tabela posiada 2 kolumny ID oraz ILOSC_OSOB_W_PRZEDSIEBIORSTWIE.
> wartosci sa wygenerowane losowo i chcilabym przeprowadzic na nich
> badanie statystyczne.
>
> zapytanie:
> SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
> (ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
> COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
> MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
> AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
> FROM KLASYFIKACJA_CECHY_ZMIENNEJ
> WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1 AND 50;
>
> zwraca oczywiscie jedna linie, w jaki sposob uzyskac odpowiedz
> pogrupowa na przedzialy np
> 1-50, 50-100, 100-150, 150 i wiecej ?
>
> --
> pozdrawiam
> Piotrek
>
>
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
...
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1 AND 50;

UNION ALL

SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
...
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 51 AND 100;

UNION ALL

SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
...
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 101 AND 150;

UNION ALL

SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
...
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE >150




bebop - 25-03-2006 01:21

  bebop wrote:

(..)
wymodzilem ponizsze zapytanie, petla jest oczywsta , parametry sie
zmieniaja, czy da sie zapytanie przedstawic w prostszej formie?

wymodzenie:

SELECT PRZEDZIAL, LICZEBNOSC,"GRANICA PRZEDZIALU", "SREDNIA W
PRZEDZIALE"
FROM (
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM KLASYFIKACJA_CECHY_ZMIENNEJ
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1 AND 500
UNION
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM KLASYFIKACJA_CECHY_ZMIENNEJ
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 500 AND 1000
UNION
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM KLASYFIKACJA_CECHY_ZMIENNEJ
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1000 AND 1500
UNION
SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM KLASYFIKACJA_CECHY_ZMIENNEJ
WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1500 AND 2000
)
ORDER BY "GRANICA PRZEDZIALU"

--
pozdrawiam
Piotrek




bebop - 25-03-2006 01:21

  max wrote:

(...)
dzieki max :),

doszedlem do tego samego wniosku. samo union troche skaszanilo kwestie
i 3a bylo wyniki poszeregowac

.... ale co zrobc w przypadku gdy takich grupowan jest np 50, da sie
to jakos uproscic?

--
pozdrawiam
Piotrek





Grzegorz Danowski - 25-03-2006 01:21

 
Uzytkownik "bebop" <bebop2funk@googlemail.com> napisal w wiadomosci
news:dvvk8f$2aj$1@inews.gazeta.pl...
> Witam
>
> zmagam sie z zadaniem i proslbym o wskazowki dotyczace rozwiazania.
>
> tabela posiada 2 kolumny ID oraz ILOSC_OSOB_W_PRZEDSIEBIORSTWIE.
> wartosci sa wygenerowane losowo i chcilabym przeprowadzic na nich
> badanie statystyczne.
>
> zapytanie:
> SELECT MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
> (ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
> COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
> MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
> AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
> FROM KLASYFIKACJA_CECHY_ZMIENNEJ
> WHERE ILOSC_OSOB_W_PRZEDSIEBIORSTWIE BETWEEN 1 AND 50;
>
> zwraca oczywiscie jedna linie, w jaki sposob uzyskac odpowiedz
> pogrupowa na przedzialy np
> 1-50, 50-100, 100-150, 150 i wiecej ?
>

1. Zrób sobie tabelke:
Create Table Przedzialy(
DolnyProg Int Primary Key,
GornyProg Int Null
)

2. Wrzuc tam wszystkie przedzialy, czyli np.
Insert Into Przedzialy(DolnyProg, GornyProg) Values(1, 50)
....
Insert Into Przedzialy(DolnyProg, GornyProg) Values(150, Null)

3. Zmodyfikuj zapytanie:

SELECT
MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' ||
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM
KLASYFIKACJA_CECHY_ZMIENNEJ As K
Inner Join
Przedzialy As P
On
K >= P.DolnyProg
And
(K < P.GornyProg Or P.GornyProg Is Null)

Teraz do woli mozesz sobie manipulowac przedzialami.
W przyszlosci mozesz zrezygnowac z pewnej nadmiarowosci jaka jest podawanie
dolnego i górnego progu, co tylko wiaze sie z ryzykiem powstania przedzialów
zazebiajacych sie lub pomininiecia czesci danych. Mozesz wiec oprzec sie
tylko na dolnym progu, jednak bedziesz musial rozbudowac powyzsze zapyanie.

Pozdrawiam
Grzegorz




bebop - 26-03-2006 00:21

  Grzegorz Danowski wrote:

(...)
dzieki Gregorz za wskazowke :o)
do pelni szczescia brakowalo jedynie grupowania (zapytanie laczylo
wszystkie przedzialy)

SELECT
MIN(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) ||' - ' || MAX
(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) PRZEDZIAL,
COUNT(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) LICZEBNOSC,
MAX(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "GRANICA PRZEDZIALU",
AVG(ILOSC_OSOB_W_PRZEDSIEBIORSTWIE) "SREDNIA W PRZEDZIALE"
FROM
KLASYFIKACJA_CECHY_ZMIENNEJ K, PRZEDZIALY P
WHERE
K.ILOSC_OSOB_W_PRZEDSIEBIORSTWIE >= P.DOLNYPROG
AND
K.ILOSC_OSOB_W_PRZEDSIEBIORSTWIE < P.GORNYPROG
GROUP BY P.GORNYPROG

--
pozdrawiam
Piotrek




Romek - 29-03-2006 00:26

 
Nie wnikając w tresc selecta, sposoby rozwązania tego problemu za
podrecznikami:)

1. Tablka Cecha_grade

war gora doł
1 0 50
2 51 60
3 61 70

select 'lista agregatów'
from cecha_grade c, moja_tabela m
where m.cecha between c.dol and c.gora
group by c.war

2.
select 'lista agregatów'
from moja_tabela m
group by tranc(stała * m.cecha, poziom zakraglania)
- jezeli pozomy grupwania o satlym rozstepie
(za pomoca mnozenia przez stale kazdy mozna uzyskac odwolne stale
przedzialy)

3. zmine rozstepy tu juz gorzej ( trzeba dobrac odpowiednie przeksztalcenie)
select 'lista agregatów'
from moja_tabela m
group by tranc( funkcja(m.cecha), poziom zakraglania)

funkcja - log(), sqrt(), nlog(n), power(cecha, potega)

lub jakies inne wymazone:)

pozrdrawiam
romek




bebop - 04-04-2006 01:48

  Romek wrote:

> select 'lista agregatów'
> from moja_tabela m
> group by tranc(stała * m.cecha, poziom zakraglania)
> - jezeli pozomy grupwania o satlym rozstepie
> (za pomoca mnozenia przez stale kazdy mozna uzyskac odwolne stale
> przedzialy)
Dzieki Romek,to bardzo cenna uwaga :)

> 3. zmine rozstepy tu juz gorzej ( trzeba dobrac odpowiednie przeksztalcenie)
> select 'lista agregatów'
> from moja_tabela m
> group by tranc( funkcja(m.cecha), poziom zakraglania)
>
> funkcja - log(), sqrt(), nlog(n), power(cecha, potega)
>
> lub jakies inne wymazone:)
wywazone ;)

--
pozdropit
'uwazam odpowiedz za uzyteczna w 10%'
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?= =?iso-8859-2?q?Grupowanie_-_naj=B6wie=BFsze_stany_z_czujnik=F3w?= PLSQL ORACLE grupowanie po dacie(rok-m-c-dzien-godzina) =?iso-8859-2?q?[mysql]_Grupowanie_rekord=F3w_wg_dat?= count(*), jak pokazać wiersze bez wartości przy grupowaniu [PGSQL] Pobranie danych z kilu tabel i grupowanie Grupowanie =?ISO-8859-2?Q?wynik=F3w_=5Bsql=5D?= MySQL - kwerenda krzyzowa lub grupowanie na dwoch poziomach [mysql] sortowanie-grupowanie hierarchicznych danych [mysql] grupowanie danych w jednej tabeli
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • atanvarne633.opx.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