2017-04-19 50 views
2

第一篇文章在這裏!MySQL-當它裏面的變量不存在時得到一個SUM

因此,作爲一個年輕的Padawan在SQL和數據庫一般我正在創建一個企業的數據庫來管理訂單/項目/價格等我想創建一個視圖,從3個鏈接的表{項目,價格,折扣}(見底部的表格)計算並顯示項目的總價格。作爲一項規則,折扣列不應該是零(因爲我們只在表格中要discounts條目與實際的折扣,而不是0)

從以下條目我想要展示他們所有但我的觀點只有顯示與折扣。

insert into items (`item_id`,`item_name`, `item_quantity`) values 
(102,'item1',20), 
(103,'item2',20), 
(404,'item3',20); # <-- It won't be shown if I do SELECT * FROM view; 

insert into discounts (`item_id`,`discount`) values 
(102,50), 
(103,25); 

insert into prices (`item_id`,`price`) values 
(102,100), 
(103,100), 
(404,100); 

這裏是我的看法:

CREATE VIEW ItemsPrice AS 
SELECT 
    i.item_id, 
    i.item_name, 
    SUM((1-d.discount/100)*p.price*i.item_quantity) 

FROM 
    items AS i 
    INNER JOIN 
     prices AS p ON i.item_id=p.item_id 
    INNER JOIN 
     discounts AS d ON (p.item_id=d.item_id)  
GROUP BY item_id 
ORDER BY total; 

這裏是我的表(以防萬一我讓他們錯了):

DROP TABLE IF EXISTS `items`; 
CREATE TABLE `items` (
    `item_id` int(30) NOT NULL, 
    `item_name` varchar(35) NOT NULL, 
    `item_quantity` double(25,0) , 
    PRIMARY KEY (`item_id`) 

); 
#2======= 
DROP TABLE IF EXISTS `prices`; 
CREATE TABLE `prices` (
    `item_id`int(30) NOT NULL, 
    `price` decimal(30,2) NOT NULL, 

    PRIMARY KEY (`item_id`), 
    CONSTRAINT `prices_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`) 
); 
#3======= 
DROP TABLE IF EXISTS `discounts`; 
CREATE TABLE `discounts` (
    `item_id` int(30) NOT NULL, 
    `discount` int(3) NOT NULL, 
    PRIMARY KEY (`item_id`), 
    CONSTRAINT `discount_ibfk_1` FOREIGN KEY (`item_id`) REFERENCES `items` (`item_id`) 
); 

對不起,沒有提供一個架構。不知道如何製作一個。

希望我沒有浪費你的大部分時間!你是我的英雄。

+0

精美的措辭問題,清晰,重點突出,一切必要的支持細節。你會在StackOverflow中走得更遠。 –

回答

1

您只需要一個左連接 - 即使沒有折扣,這個連接也會獲得價格的所有商品。您可以使用COALESCE將NULL折扣替換爲有效的數字。

SELECT 
    i.item_id, 
    i.item_name, 
    COALESCE(d.discount,0) as discount, 
    p.price, 
    i.item_quantity 
FROM 
    items AS i 
    INNER JOIN 
     prices AS p ON i.item_id=p.item_id 
    LEFT JOIN 
     discounts AS d ON (p.item_id=d.item_id)  
GROUP BY item_id 
ORDER BY total; 

您與COALESCE查詢:

SELECT 
    i.item_id, 
    i.item_name, 
    (1-COALESCE(d.discount,0)/100)*p.price*i.item_quantity) as totalAmount 
FROM 
    items AS i 
    INNER JOIN 
     prices AS p ON i.item_id=p.item_id 
    LEFT JOIN 
     discounts AS d ON (p.item_id=d.item_id)  
GROUP BY item_id 
ORDER BY total; 
+0

您好,感謝您的快速回復。 現在它確實顯示條目'404',但總值爲NULL, – Spoting

+0

掛起,我看到你編輯添加選擇。我可以解決這個問題。更新了 –

+0

...仍然需要對數學進行調整。我在想... –

相關問題