MYSQL:合并两个不同的表并计算一列的总和,并按两列计算GROUP]]

问题描述 投票:1回答:1

我有下表:

表#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'

INNER JOIN:

        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:SELECT * FROM portal.reports; #id,日期,ont_type,数量'1','2020-04-05','2511','200''2','2020-04-05','5120','350'...] >

mysql group-by sum inner-join
1个回答
0
投票

您可以加入,汇总和使用窗口函数来计算每个供应商的总数:

select 
    r.date, 
    o.vendor, 
    o.type, 
    sum(r.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
© www.soinside.com 2019 - 2024. All rights reserved.