Mysql 选择一个特定值,如果不存在,则选择最小值

Mysql 选择一个特定值,如果不存在,则选择最小值,mysql,sql,Mysql,Sql,我一直在尝试使用SQL(MySQL 5.6)解决问题。需要获取ID为2的地址,如果不存在ID为2,则获取较低的ID 比如说 |-----------------|---------------| | CostumerID | AddressID | |-----------------|---------------| | 1 | 4 | | 1 | 1 | | 1

我一直在尝试使用SQL(MySQL 5.6)解决问题。需要获取ID为2的地址,如果不存在ID为2,则获取较低的ID

比如说

|-----------------|---------------|
|  CostumerID     |  AddressID    |
|-----------------|---------------|
|      1          |     4         |
|      1          |     1         |
|      1          |     2         |
|      2          |     3         |
|      2          |     4         |
|      3          |     4         |
|      4          |     3         |
|      4          |     4         |
|      5          |     2         |
|      6          |     4         |
|      7          |     2         |
|      7          |     4         |
|      8          |     3         |
|      9          |     1         |
|      9          |     3         |
|      9          |     4         |
|      9          |     2         |
|-----------------|---------------|
如果客户ID有地址ID 2,则必须获取该地址ID。如果没有,则必须获取最小地址ID。 输出必须如下所示:

|-----------------|---------------|
|  CostumerID     |  AddressID    |
|-----------------|---------------|
|      1          |     2         |
|      2          |     3         |
|      3          |     4         |
|      4          |     3         |
|      5          |     2         |
|      6          |     4         |
|      7          |     2         |
|      8          |     3         |
|      9          |     2         |
|-----------------|---------------|
到目前为止,我已经尝试过:

SELECT distinct CostumerID,
if (AddressID= 2, AddressID, 
(select min(b.AddressID) from Addresses b where b.AddressID= a.AddressID)) as tipus
FROM from Addresses a

但要在CustomerId中获取重复项。

使用聚合和
大小写
逻辑:

SELECT
    CostumerID,
    CASE WHEN COUNT(CASE WHEN AddressID = 2 THEN 1 END) > 0
         THEN 2 ELSE MIN(AddressID) END AS AddressID
FROM yourTable
GROUP BY
    CostumerID;

谢谢工作做得很好。从未考虑过计数,太棒了。请编辑您的答案,解释这是如何回答问题的。
SELECT CASE
     WHEN EXISTS(SELECT *
                 FROM   tbl_name
                 WHERE  AddressID = 2)
       THEN (SELECT *
             FROM   tbl_name
             WHERE  AddressID > 2 )
     ELSE 'Default Value'
   END