是否可以在分组之前订购mysql记录?

时间:2015-08-12 15:23:27

标签: mysql sql group-by sql-order-by

我有一个用户地址表,他们可以根据需要记录尽可能多的地址,但是如果他们愿意,他们可以指定他们的默认地址。表结构如下所示:

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

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

我的查询是:

SELECT * FROM addresses GROUP BY UserId ORDER BY IsDefault DESC

但它似乎没有在分组之前订购记录。如何获得IsDefault为1的记录,或每个用户的第一条记录?

1 个答案:

答案 0 :(得分: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