![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
witam, mam tabele
grupa | ilosc gr1 | 3 gr2 | 2 gr3 | 6 gr1 | 2 gr2 | 4 chciałbym aby w wyniku zapytania otrzymać gr1 | 5 gr2 | 6 gr3 | 6 jest jakis operator zliczajacy wartosci pol dla danej grupy? koniecznie wartosci nie ilosc tj w przypadku COUNT(*) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
WITH tabela AS
( SELECT 'a' grupa, 5 ilosc UNION SELECT 'b', 6 UNION SELECT 'c', 6 ) Ten fragment zastępuje tabelę - nie miałem danych, więc musiałem je jakoś spreparować. Jak widać tabela nazywa się "tabela" i ma dwa pola "grupa", "ilosc". SELECT *, ilosc*100./sum(ilosc) over() FROM tabela To wyświetla wszystkie pola - * i dodatkowo jedno pole wyrażone przez ilosc*100./sum(ilosc) over() To pole to wartość pola "ilosc" razy (100.) - specjalnie z kropką na końcu, aby postgresql wiedział, że ma do czynienia z liczbą zmiennoprzecinkową. sum(ilosc) over() oblicza sumę pola ilosc dla WSZYSTKICH rekordów z tabeli. Musiałbyś doczytać co robi tak naprawdę OVER(), bo akurat tu jest proste - bez paraetrów. Może być np. sum(ilosc) over(partition by grupa order by grupa)... Ale dla sum jest to troche bez sensu. lepiej widać na rank(). |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 17.04.2013 Ostrzeżenie: (0%) ![]() ![]() |
WITH tabela AS ( SELECT 'a' grupa, 5 ilosc UNION SELECT 'b', 6 UNION SELECT 'c', 6 ) Ten fragment zastępuje tabelę - nie miałem danych, więc musiałem je jakoś spreparować. Jak widać tabela nazywa się "tabela" i ma dwa pola "grupa", "ilosc". SELECT *, ilosc*100./sum(ilosc) over() FROM tabela To wyświetla wszystkie pola - * i dodatkowo jedno pole wyrażone przez ilosc*100./sum(ilosc) over() To pole to wartość pola "ilosc" razy (100.) - specjalnie z kropką na końcu, aby postgresql wiedział, że ma do czynienia z liczbą zmiennoprzecinkową. sum(ilosc) over() oblicza sumę pola ilosc dla WSZYSTKICH rekordów z tabeli. Musiałbyś doczytać co robi tak naprawdę OVER(), bo akurat tu jest proste - bez paraetrów. Może być np. sum(ilosc) over(partition by grupa order by grupa)... Ale dla sum jest to troche bez sensu. lepiej widać na rank(). niestety nie zabardzo to dziala... mam taka tabele grupa| ilosc a | 2 a | 5 a | 6 b | 2 b | 5 b | 3 c | 1 c | 23 c | 3 a wynik potrzebuje: grupa| procent z calosci kolumny a | xxx b | xxx c | xxx a w twoim zapytaniu nie zlicza calosci grupy jedna grupa wystepuje po kilka razy w wyniku |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 05:23 |