gpt4 book ai didi

MySQL - 减去表的某些行并将结果与​​其他行一起显示

转载 作者:行者123 更新时间:2023-11-29 02:36:23 25 4
gpt4 key购买 nike

几个小时以来,我一直在努力解决这个问题。我有大量数据,我只想显示 ID 为 10、15、18 和 25 的部门。从这里,我想从 15 中减去 ID 为 18 的每个部门的利润,即 15-18。

我使用以下查询过滤数据:

SELECT * FROM deptTable WHERE ID IN(10,15,18,25) AND date = '2009-01-25'

部门 ------------ 日期 ---------------- ID ---------------- -- 利润
英国 ---------- 2009-01-25 ---------- 10 -------------- 2000
巴西 ------ 2009-01-25 ---------- 10 -------------- 1300
日本-------- 2009-01-25 -------- 10 ---------------- 2500
西类牙-------- 2009-01-25 -------- 10 ---------------- 3200
英国 ---------- 2009-01-25 ---------- 15 -------------- 4000
巴西 ------ 2009-01-25 -------- 15 ---------------- 1700
日本-------- 2009-01-25 -------- 15 ---------------- 3500
西类牙-------- 2009-01-25 -------- 15 ---------------- 1200
英国 ---------- 2009-01-25 -------- 18 ---------------- 2500
巴西 ------ 2009-01-25 -------- 18 ---------------- 1300
日本-------- 2009-01-25 -------- 18 ---------------- 2120
西类牙-------- 2009-01-25 -------- 18 ---------------- 800

英国 ---------- 2009-01-25 ---------- 25 -------------- 3000
巴西 ------ 2009-01-25 ---------- 25 -------------- 1850
日本-------- 2009-01-25 -------- 25 ---------------- 1580
西类牙-------- 2009-01-25 -------- 25 ---------------- 1070

我基本上想要的是从 ID 15 的行中减去 ID 18 的每一行。以英国为例:

4000 - 2500 = 1500,完成其余的部门区域将得到所需的结果,即:

部门 ------------ 日期 ---------------- ID ---------------- -- 利润
英国 ---------- 2009-01-25 ---------- 10 -------------- 2000
巴西 ------ 2009-01-25 ---------- 10 -------------- 1300
日本-------- 2009-01-25 -------- 10 ---------------- 2500
西类牙-------- 2009-01-25 -------- 10 ---------------- 3200
英国 ------------ 2009-01-25 -------- 15-18 ------------ 1500
巴西 ------ 2009-01-25 ---------- 15-18 ---------- 400
日本-------- 2009-01-25 ------------ 15-18 ------------ 1380
西类牙-------- 2009-01-25 -------- 15-18 ------------ 400

英国 ---------- 2009-01-25 ---------- 25 -------------- 3000
巴西 ------ 2009-01-25 ---------- 25 -------------- 1850
日本-------- 2009-01-25 -------- 25 ---------------- 1580
西类牙-------- 2009-01-25 -------- 25 ---------------- 1070

2分:
1. 计算的行 ID 列不必读取“15-18”,我只是输入了“15-18”来帮助解释问题
2. 斜体/粗体是唯一计算的行,所有其他行保持不变

这样的事情肯定是可能的吗?

谢谢,

最佳答案

我认为这样的事情会奏效......

SELECT a.dept, a.date, IF(a.id=15,'15-18',a.id) AS id, IF(b.profit IS NULL,a.profit,a.profit-b.profit) AS profit
FROM deptTable a
LEFT JOIN deptTable b ON a.ID=15 AND b.ID=18 AND a.dept=b.dept
WHERE a.ID IN(10,15,25) AND a.date = '2009-01-25'

测试结果:

+--------+------------+-------+--------+
| dept | date | id | profit |
+--------+------------+-------+--------+
| UK | 2009-01-25 | 10 | 2000 |
| Brazil | 2009-01-25 | 10 | 1300 |
| JAPAN | 2009-01-25 | 10 | 2500 |
| SPAIN | 2009-01-25 | 10 | 3200 |
| UK | 2009-01-25 | 15-18 | 1500 |
| Brazil | 2009-01-25 | 15-18 | 400 |
| JAPAN | 2009-01-25 | 15-18 | 1380 |
| SPAIN | 2009-01-25 | 15-18 | 400 |
| UK | 2009-01-25 | 25 | 3000 |
| Brazil | 2009-01-25 | 25 | 1850 |
| JAPAN | 2009-01-25 | 25 | 1580 |
| SPAIN | 2009-01-25 | 25 | 1070 |
+--------+------------+-------+--------+

关于MySQL - 减去表的某些行并将结果与​​其他行一起显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4492992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com