2016-09-27 10 views
0

我的表如下所示:MySQL的 - 使用計數,而當在左連接

產品

id  title  price 
-------------------------------------- 
    5  777  15   
    6  777  16 
    7  777  14 

產品詳細信息

id  pid  quantity  color 
-------------------------------------- 
    1  5  5    red 
    2  5  5    yellow 
    3  5  5    green 
    4  6  6    yellow 
    5  6  5    red 
    6  7  5    red 
    7  7  4    pink 

我希望得到以下的輸出:

預期的效果

id  title  price numberofdetails quantity 
------------------------------------------------------ 
    5  777  15   3   15 
    6  777  16   2   11 
    7  777  14   2   9 

爲了得到這個我運行下面的MySQL查詢:

查詢

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) 
FROM products as p 
LEFT JOIN productdetails as pd 
ON p.id = pd.pid 

在寫這個查詢假設,因爲我已經定義的關係products.id和productdetails.pid之間會COUNT(pd.id)= 3。而不是隻計算匹配的行,它顯示'7',總行數。我如何修復我的查詢以獲得如上所示的預期結果。

回答

1

你非常接近。我想你只需要GROUP BY

SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) 
FROM products p LEFT JOIN 
    productdetails pd 
    ON p.id = pd.pid 
GROUP BY p.id, p.title, p.price; 

在大多數數據庫中,你的查詢會返回一個錯誤。但是,MySQL擴展了SQL的定義以允許SELECT(例如p.id)中不在GROUP BY中的列。由於聚合功能,你有一個聚合查詢。沒有GROUP BY,它總是返回一行,彙總所有數據。

+0

誰知道GROUP BY會如此寶貴:P非常感謝您的解釋。我希望我不會再犯同樣的錯誤。 –

1

SELECT p.id,p.title,p.price,COUNT(pd.id),SUM(pd.quantity) FROM商品P LEFT JOIN 產品詳細概率pd ON p.id = pd.pid GROUP BY p.id

group by p.id已經足夠

+0

嘗試僅使用p組的id –