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, botów: 0