我有两张表A和B,用时间bs分区,两张表的sku和num作为关联条件,现在想求在两张表bs=20230101时,A表所有有的sku和num的good和bad的值,在B表对应的sku和num的bgood和bbad的值(B表有时候同一个sku和num会把bgood和bbad拆分成两条,需要统计合并)
时间: 2024-02-09 17:08:48 浏览: 25
可以使用以下 SQL 语句实现:
```
SELECT A.sku, A.num, SUM(A.good) AS good, SUM(A.bad) AS bad, SUM(B.bgood) AS bgood, SUM(B.bbad) AS bbad
FROM A
LEFT JOIN (
SELECT sku, num, SUM(bgood) AS bgood, SUM(bbad) AS bbad
FROM B
WHERE bs = '20230101'
GROUP BY sku, num
) AS B
ON A.sku = B.sku AND A.num = B.num
WHERE A.bs = '20230101'
GROUP BY A.sku, A.num
```
这条 SQL 语句中,首先在 B 表中筛选出 bs=20230101 的数据,然后按照 sku 和 num 进行分组,并对 bgood 和 bbad 求和。接着,使用左连接将 A 表和 B 表进行关联,关联条件为 sku 和 num 相等,同时 A 表的 bs 也等于 20230101。最后,使用 GROUP BY 对 sku 和 num 进行分组,并对 good、bad、bgood 和 bbad 分别求和。
相关问题
我有两张表A和B,用时间bs分区,现在想求在两张表bs=20230101时,A表所有的sku和num的good和bad的值,和在B表中相同的sku和num的bgood和bbad的值
你可以使用以下SQL语句来实现你的需求:
```
SELECT
A.sku,
A.num,
SUM(A.good) AS agood,
SUM(A.bad) AS abad,
SUM(B.bgood) AS bgood,
SUM(B.bbad) AS bbad
FROM
A
LEFT JOIN
B
ON A.sku = B.sku AND A.num = B.num
WHERE
A.bs = 20230101 AND B.bs = 20230101
GROUP BY
A.sku,
A.num
```
这个SQL语句会将表A和表B按照sku和num进行关联,并且使用WHERE语句过滤出bs等于20230101的记录。最后使用GROUP BY语句将结果按照sku和num进行分组,并且对agood、abad、bgood和bbad进行求和。
我有两张表A和B,用时间bs分区,两张表sku和num相同,现在想求在两张表bs=20230101时,以A表为基准,A表的sku和num的good和bad的值,和在B表中相同的sku和num的bgood和bbad的值
好的,根据你的描述,这个问题可以使用SQL语句来解决。假设表A和表B的名称分别为`table_a`和`table_b`,sku和num列的名称分别为`sku`和`num`,good和bad列的名称分别为`good`和`bad`,bgood和bbad列的名称分别为`bgood`和`bbad`,bs列的名称为`bs`,则可以使用以下SQL语句来解决你的问题:
```
SELECT a.sku, a.num, a.good, a.bad, b.bgood, b.bbad
FROM table_a a
JOIN table_b b
ON a.sku = b.sku AND a.num = b.num
WHERE a.bs = '20230101' AND b.bs = '20230101';
```
这个SQL语句使用了INNER JOIN来将表A和表B连接起来,其中ON子句指定了连接条件,即sku和num列的值必须相同。然后,在WHERE子句中限定了bs列的值为'20230101',这样只有在bs为'20230101'的行才会被返回。最后,SELECT子句中指定了要返回的列,即a表中的sku、num、good和bad列,以及b表中的bgood和bbad列。
注意,这个SQL语句是基于假设的表结构和列名称,如果实际情况与假设不同,请相应地修改SQL语句。