SQL创建唯一值标志

时间:2018-11-23 04:45:33

标签: mysql sql unique

关于在MySQL查询中选择唯一值有很多问题/答案,但是在创建唯一值标志方面我还没有见过。

我有一个customer_ID,它可以在查询输出中出现多次。我想创建一个新列,以标记customer_ID是否唯一(0或1)。

输出应如下所示:

ID     | Customer ID      | Unique_Flag
1      | 1234             | 1
2      | 2345             | 1
3      | 2345             | 0
4      | 5678             | 1

请让我知道是否有人需要澄清。

3 个答案:

答案 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)

Sample table example您可以使用下面提供的Lead函数来获取所需的输出。

SELECT ID, CUSTOMER_ID, CASE WHEN CUSTOMER_ID != CUSTOMER_ID_NEXT THEN 1 ELSE 0 END AS UNIQUE_FLAG FROM (SELECT ID, CUSTOMER_ID,LEAD(CUSTOMER_ID, 1, 0) OVER (ORDER BY CUSTOMER_ID) AS CUSTOMER_ID_NEXT FROM TABLE)T