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