我想以 (country, total_revenue) 的形式生成一個包含兩列的表
這就是關系模型的樣子,表 orderdetails 中的每個條目都可以產生收入,其形式為 = quantityordered(a column)* priceEach(also a column)。
訂單產生的收入是訂單中的 orderdetails 收入的總和,但前提是訂單的狀態為已發貨。兩個表 orderdetails 和 order 由列 ordernumber 關聯。
訂單具有參考客戶表的客戶編號,并且客戶表具有國家/地區欄位。total_country_revenue 是一個國家/地區客戶的所有已發貨訂單的總和。
到目前為止,我已經嘗試首先通過使用 group by(使用 ordernumber 或客戶編號?)來生成一個表格,其中包含 orderdetails 收入和客戶編號列,以便與客戶加入并再次使用 group by,但我一直得到奇怪的結果.. ...
-訂單詳情表-
| 訂單號 | 訂購數量 | 每個的價格 |
|---|---|---|
| 1 | 10 | 2.39 |
| 1 | 12 | 1.79 |
| 2 | 12 | 1.79 |
| 3 | 12 | 1.79 |
-訂單表-
| 訂單號 | 地位。 | 客戶編號 |
|---|---|---|
| 1 | 已發貨 | 11 |
| 1 | 已發貨 | 12 |
| 2 | 取消 | 13 |
| 3 | 已發貨 | 11 |
-客戶表-
| custom_num | 國家 |
|---|---|
| 11 | 美國 |
| 12 | 法國 |
| 13 | 日本 |
| 11 | 美國 |
-結果表-
| 國家 | 總收入 |
|---|---|
| 11 | 1300 |
| 12 | 1239 |
| 13 | 800 |
| 11 | 739 |
uj5u.com熱心網友回復:
你的描述有點奇怪。您正在寫要建立每個國家/地區的總和,但是在應該顯示預期結果的表格中,您沒有建立總和,也沒有顯示國家/地區。此外,您寫道您希望排除狀態不為“已發貨”的訂單,但您的示例結果包括它們。此查詢將產生您用文字描述的結果,而不是您添加為表格的結果:
SELECT c.country,
SUM(d.quantityordered * d.price_each) AS total_revenue
FROM
orders o
JOIN orderdetails d ON o.ordernumber = d.ordernumber
JOIN customers c ON o.customer_num = c.custom_num
WHERE o.status = 'shipped'
GROUP BY c.country;
正如您所看到的,您將需要對JOIN您的表應用一個GROUP BY國家/地區子句。
注意:您可以洗掉該WHERE子句并將其條件添加到JOIN. 這可能會減少查詢的執行時間,但可讀性可能會降低。
進一步說明:您還可以考慮使用PARTITION BYc.country 的視窗函式。由于您沒有標記資料庫型別,因此該選項的確切語法尚不清楚。
最后一點:您的示例資料看起來很奇怪。是否真的打算將訂單同時計算為法國和美國?
如果上述查詢不是您要查找的內容,請查看您的描述并進行修復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529136.html
