Mysql SELECT如果存在值,如果不存在,则计算并插入它

时间:2017-01-02 20:14:34

标签: mysql

我不确定这是否可以按照我想要的方式完成,我知道我可以很容易地用PHP做到这一点但是由于一些项目特定的限制我只能使用sql

假设我有一个historical_sales表

------------------------
| year | month | total |
------------------------
| 1990 |    01 |     5 |
------------------------
| 1990 |    02 |    10 |
------------------------
| 1990 |    04 |    20 |
------------------------

我需要执行类似的事情:

SELECT IF (total is NULL, 
  INSERT INTO historic_sales (year,month,total) 
  VALUES ('1990','03',
    SELECT SUM(totals) FROM orders WHERE year='1990' AND month = '03'), total) 
FROM historic_sales WHERE year = '1990' and month = '03'

我想要的是首先尝试在historical_sales中找到所需的总数,如果我找不到它,我会从单个销售表中计算它,然后将其保存到historical_sales表。

1 个答案:

答案 0 :(得分:1)

尝试使用这样的函数:

CREATE FUNCTION get_total(yr VARCHAR(4), mth VARCHAR(2)) RETURNS double
BEGIN
DECLARE ttl DOUBLE;
SET ttl=(SELECT total FROM historic_sales WHERE year=yr AND month=mth);
IF ttl IS NULL THEN
    SET ttl=(SELECT SUM(totals) FROM orders WHERE year=yr AND month=mth);
    INSERT INTO historic_sales (year,month,total)
      VALUES (yr,mth,ttl);
END IF;
RETURN ttl;
END