簡體   English   中英

SQL 查詢:有條件連接

[英]SQL Query: join with condition

我有以下表格:

           Customer
|   c_id   |      name      |  
| -------- | -------------- |
|  1       | Adam           |
|  2       | Bradley        |
|  3       | Chandler       |
|  4       | Damian         |
|  5       | Eric           |
|  6       | Frank          |


           orders
| order_id |    c_id        |      amount
| -------- | -------------- | -------------- |
|  1       | 1              | 50
|  2       | 1              | 2
|  3       | 2              | 15
|  4       | 2              | 22
|  5       | 2              | 10
|  6       | 2              | 7
|  7       | 3              | 7
|  8       | 3              | 2
|  9       | 5              | 18
|  10      | 5              | 24
|  11      | 6              | 60
|  12      | 6              | 1

我想創建一個訂單金額超過 50 的用戶列表。

此列表應包括 c_id、名稱和所有訂單的總和,包括 50 歲以下的訂單。

所以它應該是這樣的:

| c_id     |    name        |      amount
| -------- | -------------- | -------------- |
|  1       |Adam            | 52
|  6       | Frank          | 61

您可以使用group byhaving

select c.c_id, c.name, sum(o.amount)
from orders o join
     customers c
     on o.c_id = c.c_id
group by c.c_id, c.name
having max(o.amount) > 50;

最好把它分解成塊:

總金額超過50的客戶:

 SELECT user_id FROM orders GROUP BY user_id HAVING sum(amount) >= 50;

滿足上述條件的客戶每筆訂單的金額總和:

 SELECT user_id, sum(amount) as order_total 
 FROM orders
 WHERE user_id IN (SELECT user_id FROM orders HAVING sum(amount) >= 50 GROUP BY user_id)
 GROUP BY user_id;

您可以加入您的客戶表以獲取名稱。 不包括在內,因為這是更直接的問題。

SELECT
  c_id
, name
, SUM(amount) AS total_amount
FROM
  orders a
  INNER JOIN customer b
  ON b.c_id = a.user_id
WHERE
    c_id IN (
    SELECT
      user_id
    FROM
      orders
    WHERE
      amount >= 50)
GROUP BY c_id, name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM