Presto разделите пары строк по общим именам - PullRequest
0 голосов
/ 28 февраля 2020

Скажем, у меня есть заявление presto, возвращающее

|Name|Type    |Count|
|A   | total  |   2 |
|A   | count  |   4 |
|B   | total  |   3 |
|B   | count  |   9 |

Как мне добиться чего-то вроде

|Name|Avg |
|A   |  2 |
|B   |  3 |

В основном

A.avg = A.count/A.total
B.avg = B.count/B.total

Спасибо

PS: Не то, что разбирается в SQL

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы можете сделать это с помощью самостоятельного соединения

select a.Name, 
Total/Count as Avg 
from (select Name, Count as total From tbl where Type = 'total')a
inner join (select Name, Count From tbl where Type = 'count') b on a.Name = b.Name
0 голосов
/ 28 февраля 2020

Я бы просто использовал условную агрегацию:

select name,
       ( max(case when type = 'count' then count end) /
         max(case when type = 'total' then count end)
       ) as average
from t
group by name;

На самом деле, если предположить, что total> = count, то это еще проще:

select name, min(count) / max(count) as average
from t
group by name;

Если Вы действительно предпочли join над group by:

select t.name, tc.count / tt.count
from t tc join
     t tt
     on tc.name = tt.name and
        tc.type = 'count' and
        tt.type = 'total';
...