試試這個:
SELECT SUM(p.price) Total_quoted_value
FROM `quotes`
INNER JOIN `quote_items`
ON `quotes`.`id` = `quote_items`.`quote_id`
INNER JOIN products p
ON p.id = new_product_id
Where `quotes`.`created_by` = 5
-----編輯---------- 一個例子如何計算的平均價格
SELECT SUM(p.price) Total_quoted_value, AVG(p.price) Avg_value
FROM `quotes`
INNER JOIN `quote_items`
ON `quotes`.`id` = `quote_items`.`quote_id`
INNER JOIN products p
ON p.id = new_product_id
Where `quotes`.`created_by` = 5;
指向sqlfiddle demo的鏈接
------編輯 - 什麼第二加入做--------------
一個簡短的說明,我們有三個表:
> select * from products
+ ------- + ----------------- + ---------- +
| id | product_name | price |
+ ------- + ----------------- + ---------- +
| 1 | product 1 | 20 |
| 2 | product 2 | 40 |
| 3 | product 3 | 30 |
| 4 | product 4 | 15 |
| 5 | product 5 | 5 |
+ ------- + ----------------- + ---------- +
> select * from quotes
+ ------- + --------------- +
| id | created_by |
+ ------- + --------------- +
| 1 | 5 |
| 2 | 4 |
| 3 | 5 |
| 4 | 1 |
+ ------- + --------------- +
> select * from quote_items
+ ------------- + ------------------- +
| quote_id | new_product_id |
+ ------------- + ------------------- +
| 1 | 1 |
| 1 | 2 |
| 1 | 4 |
| 2 | 2 |
| 2 | 3 |
| 2 | 5 |
| 3 | 1 |
| 3 | 3 |
| 4 | 2 |
| 4 | 4 |
| 4 | 5 |
+ ------------- + ------------------- +
釷e第一次加入:
SELECT *
FROM `quotes`
INNER JOIN `quote_items`
ON `quotes`.`id` = `quote_items`.`quote_id` ;
+ ------- + --------------- + ------------- + ------------------- +
| id | created_by | quote_id | new_product_id |
+ ------- + --------------- + ------------- + ------------------- +
| 1 | 5 | 1 | 1 |
| 1 | 5 | 1 | 2 |
| 1 | 5 | 1 | 4 |
| 2 | 4 | 2 | 2 |
| 2 | 4 | 2 | 3 |
| 2 | 4 | 2 | 5 |
| 3 | 5 | 3 | 1 |
| 3 | 5 | 3 | 3 |
| 4 | 1 | 4 | 2 |
| 4 | 1 | 4 | 4 |
| 4 | 1 | 4 | 5 |
+ ------- + --------------- + ------------- + ------------------- +
我假設你知道一個簡單的連接是如何工作的,並且這裏不需要解釋。 如果沒有,那麼你可以在這裏找到一個很好的解釋:http://www.w3schools.com/sql/sql_join_inner.asp
我們主要關注第二個(組合)連接以及它是如何工作的。下面是我們的查詢:
SELECT *
FROM quotes
INNER JOIN quote_items
ON quotes.id = quote_items.quote_id
INNER JOIN products p
ON p.id = new_product_id
基本上這個查詢相當於一個簡單的,單一的加盟:
SELECT *
FROM <<ResultSet_of_the_first_join>>
INNER JOIN products p
ON p.id = new_product_id
其中< < ResultSet_of_the_first_join>>是一個結果(通過返回一組行的第一個加盟 - 內存中的一種虛擬表格)。
此連接(第二個)產生以下結果集:
+ ---- + ------------+ ----------+ --------------- + ----+ ------------- + ------ +
| id | created_by | quote_id | new_product_id | id | product_name | price |
+ ---- + ------------+ ----------+ --------------- + ----+ ------------- + ------ +
| 1 | 5 | 1 | 1 | 1 | product 1 | 20 |
| 1 | 5 | 1 | 2 | 2 | product 2 | 40 |
| 1 | 5 | 1 | 4 | 4 | product 4 | 15 |
| 2 | 4 | 2 | 2 | 2 | product 2 | 40 |
| 2 | 4 | 2 | 3 | 3 | product 3 | 30 |
| 2 | 4 | 2 | 5 | 5 | product 5 | 5 |
| 3 | 5 | 3 | 1 | 1 | product 1 | 20 |
| 3 | 5 | 3 | 3 | 3 | product 3 | 30 |
| 4 | 1 | 4 | 2 | 2 | product 2 | 40 |
| 4 | 1 | 4 | 4 | 4 | product 4 | 15 |
| 4 | 1 | 4 | 5 | 5 | product 5 | 5 |
+ ---- + ----------- + --------- + --------------- + ----+ ------------- + ------ +
接着,WHERE clasue被施加到返回結果集僅選擇滿足WHERE條件的行:
Where quotes.created_by = 5;
後這一點,我們得到如下:
+ ---- + ------------+ ----------+ --------------- + ----+ ------------- + ------ +
| id | created_by | quote_id | new_product_id | id | product_name | price |
+ ---- + ------------+ ----------+ --------------- + ----+ ------------- + ------ +
| 1 | 5 | 1 | 1 | 1 | product 1 | 20 |
| 1 | 5 | 1 | 2 | 2 | product 2 | 40 |
| 1 | 5 | 1 | 4 | 4 | product 4 | 15 |
| 3 | 5 | 3 | 1 | 1 | product 1 | 20 |
| 3 | 5 | 3 | 3 | 3 | product 3 | 30 |
+ ---- + ----------- + --------- + --------------- + ----+ ------------- + ------ +
終於查詢calcuates從之和的平均值price
專欄:
SELECT SUM(p.price) Total_quoted_value, AVG(p.price) Avg_value
+ ----------------------- + -------------- +
| Total_quoted_value | Avg_value |
+ ----------------------- + -------------- +
| 125 | 25.0000 |
+ ----------------------- + -------------- +
太棒了,工作,謝謝。我只是對現在實際發生的事情感到困惑。你能否分解實際發生的事情,請 – mrcurious
出於興趣,是否會通過某種方式在相同的引用中查找平均報價值,而不是將結果除以:從quotes中選擇COUNT('created_by')哪裏'quotes'.'created_by' = 5 – mrcurious
@mrcurious我附加了一個例子如何計算平均價格。我不太清楚「平均報價值」是什麼意思,所以我附上了一個帶有示例數據的小演示的鏈接:http://sqlfiddle.com/#!2/6655be/2,如果這個查詢沒有不適合你的需求,請看這個演示,並顯示(在你的問題 - 通過編輯)這個樣本數據的什麼值,這個查詢不會返回。 – krokodilko