关于在MySQL查询中选择唯一值有很多问题/答案,但是在创建唯一值标志方面我还没有见过。
我有一个customer_ID,它可以在查询输出中出现多次。我想创建一个新列,以标记customer_ID是否唯一(0或1)。
输出应如下所示:
ID | Customer ID | Unique_Flag
1 | 1234 | 1
2 | 2345 | 1
3 | 2345 | 0
4 | 5678 | 1
请让我知道是否有人需要澄清。
答案 0 :(得分:1)
您似乎想将第一次出现标记为唯一,而不是其他。因此,让我们加入比较值:
select t.*,
(id = min_id) as is_first_occurrence
from t join
(select customer_id, min(id) as min_id
from t
group by customer_id
) tt
on t.customer_id = tt.customer_id;
对于大多数人来说,“唯一”标志意味着总计数为“ 1”,而不仅仅是这是第一次出现。如果那是您想要的,则可以使用类似的逻辑:
select t.*,
(id = min_id) as is_first_occurrence,
(cnt = 1) as is_unique
from t join
(select customer_id, min(id) as min_id, count(*) as cnt
from t
group by customer_id
) tt
on t.customer_id = tt.customer_id;
而且,在MySQL 8+中,您将使用窗口函数:
select t.*,
(row_number() over (partition by customer_id order by id) = 1) as is_first_occurrence,
(count(*) over (partition by customer_id) = 1) as is_unique
from t;
答案 1 :(得分:0)
您可以在下面尝试
select id,a.customerid, case when cnt=1 then 1 else 0 end as Unique_Flag
from tablename a
left join
(select customerid, count(*) as cnt from tablename
group by customerid
)b on a.customerid=b.customerid
答案 2 :(得分:0)