我需要從下表中獲取 ID 和人名,其中 address1、address2、state、city、country 列對于所有角色都有相同的資料。
| ID | 姓名 | 地址1 | 地址2 | 狀態 | 城市 |
|---|---|---|---|---|---|
| 1 | AB | AB@123 | AB@345 | st1 | ct1 |
| 2 | AB | AB@123 | AB@345 | st1 | ct1 |
| 3 | 光碟 | AB@123 | AB@345 | st1 | ct1 |
| 4 | 英孚 | EF@123 | AB@345 | st1 | ct1 |
我想要輸出為
| ID | 姓名 |
|---|---|
| 1 | AB |
| 3 | 光碟 |
select ID, Name, count(*) from person group by address1,address2,city,state having count(*) > 1;
這是一個例外:不是按運算式分組。
請提出更好的方法來實作輸出。
uj5u.com熱心網友回復:
您可以使用分析函式:
SELECT ID, Name, Address1, Address2, State, City
FROM (
SELECT p.*,
COUNT(DISTINCT Name) OVER (PARTITION BY Address1, Address2, State, City)
AS cnt,
ROW_NUMBER() OVER (
PARTITION BY Address1, Address2, State, City, Name
ORDER BY id
) AS rn
FROM person p
)
WHERE cnt > 1
AND rn = 1;
其中,對于樣本資料:
CREATE TABLE person (ID, Name, Address1, Address2, State, City) AS
SELECT 1, 'AB', 'AB@123', 'AB@345', 'st1', 'ct1' FROM DUAL UNION ALL
SELECT 2, 'AB', 'AB@123', 'AB@345', 'st1', 'ct1' FROM DUAL UNION ALL
SELECT 3, 'CD', 'AB@123', 'AB@345', 'st1', 'ct1' FROM DUAL UNION ALL
SELECT 4, 'EF', 'EF@123', 'AB@345', 'st1', 'ct1' FROM DUAL;
輸出:
ID 姓名 地址1 地址2 狀態 城市 1 AB AB@123 AB@345 st1 ct1 3 光碟 AB@123 AB@345 st1 ct1
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467495.html
