2017-01-02 97 views
0

我不確定這是否可以按照我想要的方式完成,我知道我可以輕鬆地設法使用PHP來完成此操作,但由於某些項目的特定限制,我只能使用SQLMysql SELECT如果值存在,如果不存在,計算它並插入它

讓我們假設我有一個historic_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' 

我想首先嚐試找到historic_s所需的總如果我找不到它,我會從個人銷售表中計算出來,然後將其保存到historic_sales表中。

+0

您有什麼指標? –

+0

爲什麼?創建一個幾年和幾個月的笛卡爾積的外連接不是更簡單嗎?它肯定會更有效率。 – symcbean

+0

@symcbean你能解釋一下嗎?也許這只是我不夠清楚,歷史性的桌子上有可以從銷售表中計算的每月總數。 – Josafat

回答

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   
相關問題