mysql - SQL - 按语句排序

标签 mysql sql postgresql sql-order-by

我有这样的表格:

table A
id name   email
1  test1  ex@ex.com
2  test2  ex@ex.com
3  test3  ex@ex.com
4  test4   ....
5  test5   ....

table B
id catA    catB   year member 
1  false   true   2011  2
2  true    false  2011  3
3  fals    true   2010  5

我想获取表 A 中的每一行并按以下方式对其进行排序:

FIRST, get user 2 (current year, based on table B)
SECOND, get user 3 (current year, based on table B)
after that get users that is in table B
after that get all other users.

我知道我可以有特定的 sql 来获取前两个用户,而只是 休息。但是我不应该通过一个很好的 ORDER by statement 来获得它们吗?就像限制第一个订单语句只影响第一行......

最佳答案

是这样的吗?

select A.id, A.name, A.email, B.catA, B.catB, B.year
from A
join B on A.id = B.member
ORDER BY B.year DESC, (B.member IS NOT NULL) DESC

首先按表 B 中的年份字段对所有结果进行排序,这会得到 2011 年、2010 年等...任何未在表 B 中列出的成员都将具有空年份并排序到列表底部。接下来按 B.member 不为 null 排序 - mysql 会将此 bool 结果强制为整数 1 或 0,可以对其进行排序,因此降序排序以使所有 1(非空 B.members)首先排序。

关于mysql - SQL - 按语句排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7934026/

相关文章:

mysql - 您可以使用触发器修改插入时的外键吗?

php - 无法理解错误 :Access denied for user 'Pratik' @'localhost' (using password: NO) got in php

mysql - ID或varchar为主键+多个主键

c# - 使用 Entity Framework 的代码优先方法的 ASP.NET MVC 应用程序中缺少外键关系

mysql - 多个 SELECT 语句在 MySQL 的存储过程中不起作用

c# - BigQuery : How to enable standard SQL in C#

sql - 如何在条件持续时在Mysql中选择行

sql - 如何从 PostgreSQL 中的 jsonb 获取特定对象?

c# - Entity Framework 模型生成奇怪的错误消息

SQL for public private records 这取决于所选择的项目