【问题标题】:MySQL - subtracting certain rows of a table and presenting the results alongside other rowsMySQL - 减去表的某些行并将结果与​​其他行一起显示
【发布时间】:2010-12-20 19:15:10
【问题描述】:

几个小时以来,我一直在努力解决这个问题。我有大量数据,我只想显示 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.斜体/粗体是唯一计算的行,所有其他行保持不变

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

谢谢,

【问题讨论】:

    标签: mysql if-statement left-join subtraction


    【解决方案1】:

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

    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 |
    +--------+------------+-------+--------+
    

    【讨论】:

    • 谢谢!自联接是有意义的。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多