mysql - 是否可以在对 mysql 记录进行分组之前对其进行排序?

标签 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 的记录或每个用户的第一条记录?

最佳答案

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/

相关文章:

MYSQL:如果另一列等于其他内容,则计算列

java - 根据从数据库中提取的出生日期计算年龄

sql - 为什么这个MySQL触发器会导致堆栈溢出?

python - 通过使用django orm操作MySQL数据库,有一些闲置的mysqld。如何关闭它们?

mysql - MySQL 中的分组

linq-to-sql - Linq 2 SQL 分组问题

sql-server - 如何计算每个 GroupBy 行(SQL Server)中包含多少行 "rolled up"?

Mysql 无法启动 - ibdata1 损坏? - 操作系统错误号 13 - 权限问题

php - MySQL:搜索一个句子并忽略单词的顺序

php - 为第一个 JSON PHP 添加值