我如何在SQL中减去

时间:2014-02-11 15:52:43

标签: mysql sql

我知道如何在sql中减去但在我的情况下它有点困难。

我有以下数据库

表1

id........artnumber.......price.......flag.......cid
1         12345001        1200        L         9999
2         12345002        2000        L         9999
3         12345003        500         L         7777
4         12345004        1950        L         6666
5         54321001        500         R         9999
6         54321002        1000        R         6666
7         54321003        500         R         9999

表2

id........artnumber.......comment
1         54321001        12345001
2         54321002        12345004
3         54321003        12345001

我在尝试的是: 我想从table1中选择所有具有 L 标志的声明 在这个结果我想用 L 标志从 L 标志中减去价格。但仅限于在表2的评论中有自己的艺术作品的人

我想要的结果是

artnumber.......price.......flag.......cid
12345001        200         L         9999 //her was 2 R flagged items substracted
12345002        2000        L         9999 //her was nothing substracted
12345003        500         L         7777 //her was nothing substracted
12345004        950         L         6666 //her was 1 R flagged item substracted

有人知道如何为此设置sqlstatement吗?

我在另一个帖子上找到了一些,但它并没有真正帮助我:)。

2 个答案:

答案 0 :(得分:1)

这是L价格的数据:

select l.artnumber, l.price, l.flag
from table1 l
where l.flag = 'L';

这是您的R价格数据:

select x.comment as artnumber, sum(r.price)
from table1 r
inner join table2 x on x.artnumber = r.artnumber
where r.flag = 'R';

合:

select 
  l_data.artnumber, 
  l_data.price - (case when r_data.sum_price is null then 0 else r_data.sum_price end) as calc_price,
  l_data.flag, 
  l_data.cid
from
(
  select l.artnumber, l.price, l.flag, l.cid
  from table1 l
  where l.flag = 'L'
) l_data
left join
(
  select x.comment as artnumber, sum(r.price)
  from table1 r
  inner join table2 x on x.artnumber = r.artnumber
  where r.flag = 'R'
) r_data on r_data.artnumber = l_data.artnumber;

答案 1 :(得分:1)

这似乎有点时髦,但是这里有。我想这会让你得到你想要的东西:

SELECT a.artnumber, a.price - SUM(IFNULL(b.price, 0)) price, a.flag, a.cid
FROM Table1 a 
    LEFT JOIN (Table1 b INNER JOIN Table2 ON Table2.artnumber = b.artnumber AND b.flag = 'R')
    ON Table2.comment = a.artnumber
WHERE a.flag = 'L'
GROUP BY a.artnumber, a.price, a.flag, a.cid

如果您需要我解释任何此类问题,请告诉我,但联接应该非常简单。

此外,根据您的类型,我不确定您是否必须CAST该评论字段才能进行匹配。那里可能有一些考虑因素。我也在假设你的记录的独特性。换句话说,我假设artnumberflag一起构成了一个独特的记录。