我有一个数据库表。我想在选择查询运行时将结果前 5 条记录是特定的且未排序的,在这 5 条记录下面是有序记录。
id name
1 a
2 b
3 c
4 d
我想排序如下:
id name
3 c
1 a
2 b
4 d
更新根据您提供的示例数据和期望输出,您可以执行此操作
SELECT *
FROM Table1
ORDER BY CASE
WHEN id = 3 THEN 0
WHEN id = 1 THEN 1
WHEN id = 2 THEN 2
WHEN id = 4 THEN 3
ELSE 4
END, id
这是SQLFiddle演示(SQL Server)
这是SQLFiddle演示(MySql)
另一种方法是在一次选择中获取前五条记录,在第二次中获取所有其他记录;将用户定义的列(在下面的示例中)注入n
到具有适当值的两个选择中(0
以及1
在下面的示例中)。然后将它们合并并首先按此列的外部选择顺序,并根据需要应用其他排序规则。
SELECT id
FROM
(
SELECT t.*, 0 n
FROM Table1 t
WHERE id IN (1,2,3,4,5)
UNION ALL
SELECT t.*, 1 n
FROM Table1 t
WHERE id NOT IN (1,2,3,4,5)
) q
ORDER BY q.n, CASE WHEN q.n = 1 THEN q.id END DESC
这是SQLFiddle演示(SQL Server)
这是SQLFiddle演示(MySql)
附带说明:当您询问与 sql 查询相关的问题时,请始终提供示例数据、所需输出、您当前的查询以及有关您正在使用的 RDBMS 及其版本的信息。