訂單表字段:rec_p(收貨人)、rec_addr(收貨地址)、order_no(訂單號)、user_id(用戶 ID)。
規則:任意兩訂單的 收貨人相同 或 地址相同 即視為關聯訂單。
目標:找出關聯訂單數 > 3 的記錄,輸出對應 user_id 列表。
CREATE TABLE order_table (
rec_p VARCHAR(20),
rec_addr VARCHAR(100),
order_no VARCHAR(20),
user_id VARCHAR(20)
);
INSERT INTO order_table VALUES
('張三','北京','1001','1'),
('張四','上海','1002','2'),
('張五','北京','1003','1'),
('張六','廣州','1004','3'),
('張三','深圳','1005','1'),
('張七','上海','1006','4');
SELECT a.*
FROM order_table a
JOIN (
SELECT rec_p, COUNT(*) AS pnum FROM order_table GROUP BY rec_p
) a1 ON a.rec_p = a1.rec_p
JOIN (
SELECT rec_addr, COUNT(*) AS addrnum FROM order_table GROUP BY rec_addr
) a2 ON a.rec_addr = a2.rec_addr
WHERE (a1.pnum + a2.addrnum) > 3;
a1 統計每個收貨人出現次數。a2 統計每個地址出現次數。pnum + addrnum > 3 則該訂單關聯度超標。user_id)。張三出現 2 次,北京出現 2 次,合計 4 > 3 → 訂單 1001、1005 輸出。
北京地址關聯訂單 1001、1003,張三關聯 1001、1005,合併去重後關聯訂單數滿足條件。
user_id:SELECT DISTINCT user_id FROM (...) t。rec_p、rec_addr 索引,或用臨時表分步統計。