SQL Сценарий запроса - PullRequest
       32

SQL Сценарий запроса

0 голосов
/ 05 августа 2020

У меня сценарий SQL. Не могли бы вы помочь мне с решениями для того же самого?

У меня есть 2 Tables Account и Credit_Score со схемой, как показано ниже.

    -------------
    Account Table
    -------------
    Account_Number  Score
    A1              600
    A2              600
    B1              700
    B2              700
    B3              700
    C1              800
    C2              800

    -------------------
    Credit_Score Table
    -------------------
    Score          Balance
    600            1000
    700            6000
    800            8000

Теперь мне нужен запрос, который может дать мне вывод, как показано ниже. Сумма баланса делится между Владельцами счетов, имеющими одинаковый рейтинг.

    ------------------------------
    Account_Number   |     Balance
    ------------------------------
    A1                     500
    A2                     500
    B1                     2000
    B2                     2000
    B3                     2000
    C1                     4000
    C2                     4000

Ответы [ 2 ]

3 голосов
/ 05 августа 2020

Вы можете использовать оконные функции:

select a.*,
       cs.balance / count(*) over (partition by cs.score) as balance
from account a join
     credit_score cs
     on cs.score = a.score;
1 голос
/ 05 августа 2020

приведенные ниже запросы могут быть вам полезны,

ответ @Gordon.

set hive.cli.print.header=true;
use hive_db;
create table if not exists account_table(account_number string,score string) row format delimited fields terminated by ',' stored as textfile;

insert overwrite table account_table values ("A1","600"),("A2","600"),("B1","700"),("B2","700"),("B3","700"),("C1","800"),("C2","800")

create table if not exists credit_score ( score string, balance string) row format delimited fields terminated by ',' stored as textfile;

insert overwrite table credit_score values ("600","1000"),("700","6000"),("800","8000")


select a.*,
       cs.balance / count(*) over (partition by cs.score) as balance
from account_table a join
     credit_score cs
     on cs.score = a.score;

'''
a.account_number a.score balance
A1               600     500.0
A2               600     500.0
B1               700     2000.0
B2               700     2000.0
B3               700     2000.0
C1               800     4000.0
C2               800     4000.0
'''
...