Udział danej wartości w całości

Udział danej wartości w całości
SI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 61
0

Witam serdecznie jak za pomocą jednego zapytania (bez podzapytań) wyliczyć udział jednej wartości w całości?
Mam tabelkę:
id id_osoby id_rodzaj wartość id_data

  1.   1               A              100    201701
    
  2.   1               B              300    201701
    
  3.   1               A              100    201702
    

...
i chcę mieć stosunek rodzaju 'A' do całości danych dla poszczególnej osoby. Czyli,
id_osoby wartosc_A wartosc_calosc stosunek
1 200 500 2/5
Nie wiem jak w jednym zapytaniu zsumować wartość dla rodzaju i całości w poszczególnych latach 201701-201702.

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
0
Kopiuj
select 
id_osoby
, sum(case when id_rodzaj = 'A' then wartosc else 0 end) wartosc_A
, sum(wartosc) wartosc_calosc
, sum(case when id_rodzaj = 'A' then wartosc else 0 end)/sum(wartosc) stosunek
from tab
group by id_osoby
hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Jeśli używasz nowszych wersji MySQL (8.0 lub później) to możesz użyć window functions:

Kopiuj
SELECT
    id,
    val,
    SUM(val) OVER () AS total,
    val / (SUM(val) OVER ()) AS percentage
FROM foo;

https://www.db-fiddle.com/f/ny4pUaquXWSLxPpsg6mHjX/0

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
0

Uroda SQL-a jest taka, że choć nie ma w tych kwerendach podzapytań, pod względem wydajnościowym obstawiam że są wykonywane dla każdej linii

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.