MYSQL: объединить две разные таблицы и вычислить сумму одного столбца и два столбца GROUP BY - PullRequest
2 голосов
/ 14 апреля 2020

У меня есть таблицы ниже:

ТАБЛИЦА № 1:

       SELECT * FROM portal.reports;

        # id, date, ont_type, quantity
        '1', '2020-04-05', '2511', '200'
        '2', '2020-04-05', '5120', '350'
        '3', '2020-04-05', '2520', '150'
        '4', '2020-04-05', '5114', '400'
        '5', '2020-04-05', 'HG851', '200'
        '6', '2020-04-05', 'HG851A', '400'
        '7', '2020-04-05', 'MA5620G', '9000'
        '8', '2020-04-05', 'OT550', '7000'
        '9', '2020-04-05', 'OT925', '2000'
        '10', '2020-04-05', 'OT928', '2000'
        '11', '2020-04-06', '2520', '150'
        '12', '2020-04-06', '5114', '400'
        '13', '2020-04-06', 'HG851', '200'
        '14', '2020-04-06', 'HG851A', '400'

ТАБЛИЦА № 2:

        SELECT * FROM portal.ont;

        # ontType, vendor
        '2520', 'APPLE'
        'HG851', 'GOOGLE'
        'HG851A', 'GOOGLE'
        'MA5620G', 'GOOGLE'
        'OT550', 'GOOGLE'
        'OT925', 'GOOGLE'
        '5114', 'APPLE'
        '5120', 'APPLE'

ВНУТРЕННЕЕ СОЕДИНЕНИЕ:

        SELECT Date(a.date), b.vendor, a.ont_type, a.quantity FROM portal.reports a 
        INNER JOIN
        (
            SELECT vendor, ontType FROM portal.ont  
        ) b ON b.ontType = a.ont_type AND a.date >= '2020-04-05' AND a.date <= '2020-04-08'


        # Date(a.date), vendor, ont_type, quantity
        '2020-04-05', 'APPLE', '2520', '150'
        '2020-04-05', 'GOOGLE', 'HG851', '200'
        '2020-04-05', 'GOOGLE', 'HG851A', '400'
        '2020-04-05', 'GOOGLE', 'MA5620G', '9000'
        '2020-04-05', 'GOOGLE', 'OT550', '7000'
        '2020-04-05', 'GOOGLE', 'OT925', '2000'
        '2020-04-05', 'APPLE', '5114', '400'
        '2020-04-05', 'APPLE', '5120', '350'
        '2020-04-06', 'APPLE', '2520', '150'
        '2020-04-06', 'GOOGLE', 'HG851', '200'
        '2020-04-06', 'GOOGLE', 'HG851A', '400'
        '2020-04-06', 'GOOGLE', '5114', '400'

Я должен рассчитать общее количество по поставщику GROUP BY и дате, как показано ниже:

+---------------+----------+----------+----------+-------+
|    # date     |  vendor  | ont_type | quantity | total |
+---------------+----------+----------+----------+-------+
| '2020-04-05'  | 'APPLE'  | '2520'   | '150'    | '900' |
| '2020-04-05'  | 'APPLE'  | '5114'   | '400'    | '900' |
| '2020-04-05'  | 'APPLE'  | '5120'   | '350'    | '900' |
| '2020-04-06'  | 'APPLE'  | '2520'   | '150'    | '150' |
| '2020-04-06'  | 'GOOGLE' | 'HG851'  | '200'    | '800' |
| '2020-04-06'  | 'GOOGLE' | 'HG851'  | '200'    | '800' |
| '2020-04-06'  | 'GOOGLE' | 'HG851A' | '400'    | '800' |
+---------------+----------+----------+----------+-------+

как продолжить?

1 Ответ

1 голос
/ 14 апреля 2020

Вы можете присоединиться и агрегировать, чтобы получить количество, проданное за поставщика и день. Сумма на одного поставщика может быть вычислена с помощью суммы окна (при условии MySQL 8.0):

select 
    r.date, 
    o.vendor, 
    o.type, 
    sum(r.quantity) quantity,
    sum(sum(r.quantity)) over(partition by o.vendor) total
from portal.reports r
inner join portal.ont on on o.ont_type = r.ont_type
where r.date between '2020-04-05' and '2020-04-08'
group by r.date, o.vendor, o.type

В более ранних версиях MySQL один метод для вычисления суммы на одного поставщика заключается в использовании коррелированной подзапрос:

select 
    r.date, 
    o.vendor, 
    o.type, 
    sum(r.quantity),
    (
        select sum(r1.quantity)
        from portal.reports r1
        inner join portal.ont o1 on o1.ont_type = r1.ont_type
        where o1.vendor = o.vendor and r1.date between '2020-04-05' and '2020-04-08'
    ) total
from portal.reports r
inner join portal.ont on on o.ont_type = r.ont_type
where r.date between '2020-04-05' and '2020-04-08'
group by r.date, o.vendor, o.type
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...