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

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.

0
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
0

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

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

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1