我有一个用于用户地址的表,他们可以记录任意数量的地址,但是如果需要,他们可以指定其默认地址。表结构如下所示:

+--------+---------+-----------+
| UserId | Address | IsDefault |
+--------+---------+-----------+


对于每个用户,地址字段中的1个可以将IsDefault设置为1,其他所有用户都将设置为0,但并非每个用户都将设置默认地址。我想做的是为每个用户选择一个地址行,如果他们设置了默认地址,则应该是该行,否则应该是它找到的第一个条目(他们输入的第一个地址)。

我的查询是:

SELECT * FROM addresses GROUP BY UserId ORDER BY IsDefault DESC


但是,似乎没有在对记录进行分组之前对其进行排序。如何获取IsDefault为1的记录或每个用户的第一条记录?

最佳答案

SELECT
userid,
address,
isdefault
FROM addresses
where isdefault = 1
union
SELECT
userid,
address,
isdefault
FROM addresses
where userid not in (select userid from addresses where isdefault = 1)
group by userid
order by address desc


您可以为此使用union

关于mysql - 是否可以在对MySQL记录进行分组之前对其进行排序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31969445/

10-09 04:26