簡體   English   中英

MySQL 我要 select 所有多個訂購客戶的訂單歷史

[英]MySQL I want to select all the multiple ordered customers' order history

我想 select 所有多個訂購客戶的訂單歷史記錄。

order_details 表是這樣的

+-------------+--------------------------------------+
| customer_id | store_id                             |
+-------------+--------------------------------------+
|           1 | 3g07gd22-7eba-gae9-8aeb-aae3bae6wga0 |
|           1 | 3g07gd22-7eba-gae9-8aeb-aae3bae6wga0 |
|           1 | aq8riuqj-vaef-fae2-aher-28acjxreqjxw |
|           2 | 239jfa2r-a3ga-afoi-saf3-ap093fj40qwf |
|           3 | a1lkjerq-fape-bile-aof-asfdajvaa2938 |
|           3 | 239842as-2cr3-p892-sl94-acc3qpobcqw4 |

我寫如下,

SELECT customer_id,store_id FROM order_details GROUP BY customer_id HAVING COUNT(customer_id) > 1;
+-------------+--------------------------------------+
| customer_id | store_id                             |
+-------------+--------------------------------------+
|           1 | 3g07gd22-7eba-gae9-8aeb-aae3bae6wga0 |
|           3 | a36nn0r4-aq3c-76ea-baa4-73gba43q7aa1 |

我需要這樣的結果

+-------------+--------------------------------------+
| customer_id | store_id                             |
+-------------+--------------------------------------+
|           1 | 3g07gd22-7eba-gae9-8aeb-aae3bae6wga0 |
|           1 | 3g07gd22-7eba-gae9-8aeb-aae3bae6wga0 |
|           1 | aq8riuqj-vaef-fae2-aher-28acjxreqjxw |
|           3 | a1lkjerq-fape-bile-aof-asfdajvaa2938 |
|           3 | 239842as-2cr3-p892-sl94-acc3qpobcqw4 |

我想如何編寫 sql 代碼。 我希望你能解決這個問題。

謝謝。

您可以使用 window 函數:

SELECT customer_id, store_id
FROM (SELECT od.*, COUNT(*) OVER (PARTITION BY customer_id) as cnt
      FROM order_details
     ) od
WHERE cnt > 1;

將原始表與獲取多訂單客戶的子查詢連接起來。

SELECT od.*
FROM order_details AS od
JOIN (
    SELECT customer_id
    FROM order_details 
    GROUP BY customer_id HAVING COUNT(*) > 1
) AS od1 ON od.customer_id = od1.customer_id

您可以加入一個派生表,該表聚合和過濾具有多個外觀的客戶。

SELECT od1.*
       FROM order_details od1
            INNER JOIN (SELECT od2.customer_id
                               FROM order_details od2
                               GROUP BY od2.customer_id
                               HAVING count(*) > 1) x
                       ON x.customer_id = od1.customer_id;

如果表有(主)鍵,您還可以使用EXISTS和相關子查詢。

SELECT od1.*
       FROM order_details od1
       WHERE EXISTS (SELECT *
                            FROM order_detail od2
                            WHERE od2.customer_id = od1.customer_id
                                  AND (od2.<1st key column>,
                                       ...
                                       od2.<nth key column>) <> (od1.<1st key column>,
                                                                 ...
                                                                 od1.<nth key column>));
                                          

暫無
暫無

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

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