是否可以在分组前对 mysql 条记录进行排序?
Is it possible to order mysql records before grouping them?
我有一个 table 用户地址,他们可以记录任意数量的地址,但如果他们愿意,他们可以指定默认地址。 table 结构如下所示:
+--------+---------+-----------+
| UserId | Address | IsDefault |
+--------+---------+-----------+
对于每个用户,地址字段中的 1 个可以将 IsDefault 设置为 1,所有其他的都将为 0,但并非每个用户都会设置默认地址。我想做的是 select 每个用户一个地址行,如果他们设置了默认地址,那么它应该是那一行,否则它应该是它找到的第一个条目(他们输入的第一个地址) .
我的查询是:
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
来实现。
我有一个 table 用户地址,他们可以记录任意数量的地址,但如果他们愿意,他们可以指定默认地址。 table 结构如下所示:
+--------+---------+-----------+
| UserId | Address | IsDefault |
+--------+---------+-----------+
对于每个用户,地址字段中的 1 个可以将 IsDefault 设置为 1,所有其他的都将为 0,但并非每个用户都会设置默认地址。我想做的是 select 每个用户一个地址行,如果他们设置了默认地址,那么它应该是那一行,否则它应该是它找到的第一个条目(他们输入的第一个地址) .
我的查询是:
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
来实现。