现A表有字段shopid,saledate,xssl B表有字段mkt,hsday,xssl 取A表goodsid 等于1060194 和saledate在 20230402- 20230416之间的数据 取B表gdid 等于 1060194和hsday 在2023-04-02 到 2023-04-16之间的数据 且A B 表分别按照shopid saledate,mkt hsday 分组 以A表为主表对比A表和B表之间的差异数据(shopid,saledate,sum(xssl))
时间: 2023-12-10 20:37:09 浏览: 66
软件工程师—笔试题.doc
可以使用以下 SQL 语句实现:
```sql
SELECT A.shopid, A.saledate, A.mkt, SUM(A.xssl) AS a_xssl, SUM(B.xssl) AS b_xssl
FROM A
LEFT JOIN B ON A.shopid = B.shopid AND A.saledate = B.hsday AND A.goodsid = B.gdid
WHERE A.goodsid = 1060194 AND A.saledate BETWEEN '20230402' AND '20230416' AND B.gdid = 1060194 AND B.hsday BETWEEN '2023-04-02' AND '2023-04-16'
GROUP BY A.shopid, A.saledate, A.mkt
HAVING SUM(A.xssl) <> SUM(B.xssl)
```
解释一下这个 SQL 语句:
首先使用 `LEFT JOIN` 将 A 表和 B 表连接起来,连接条件是 A 表的 `shopid` 和 `saledate` 分别等于 B 表的 `shopid` 和 `hsday`,以及 A 表的 `goodsid` 等于 B 表的 `gdid`。
然后使用 `WHERE` 子句筛选出符合条件的数据,即 A 表的 `goodsid` 等于 1060194,且 `saledate` 在 20230402 到 20230416 之间,B 表的 `gdid` 等于 1060194,且 `hsday` 在 2023-04-02 到 2023-04-16 之间。
接着使用 `GROUP BY` 将结果按照 A 表的 `shopid`、`saledate` 和 B 表的 `mkt`、`hsday` 进行分组。
最后使用 `HAVING` 子句筛选出 A 表和 B 表之间差异数据,即 A 表的 `xssl` 和不等于 B 表的 `xssl` 和。同时,使用 `SUM` 函数对 A 表和 B 表的 `xssl` 进行求和。最终输出 A 表的 `shopid`、`saledate`、B 表的 `mkt`、A 表的 `xssl` 和 B 表的 `xssl`。
阅读全文