我不确定这是否可以按照我想要的方式完成,我知道我可以很容易地用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表。
答案 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