当数据来自多个选择并将它们合并在一起时,是否可以订购。例如
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
如何按名称订购此查询。
有些人说你可以查询这样的内容。
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
但在这种情况下,我只是忽略了解决方案。
提前谢谢。
答案 0 :(得分:232)
只需写下
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Order by name
order by应用于完整的结果集
答案 1 :(得分:70)
Select id,name,age
from
(
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
) results
order by name
答案 2 :(得分:22)
为了使排序仅适用于UNION中的第一个语句,您可以将其放在带UNION ALL的子选择中(这些似乎在Oracle中都是必需的):
Select id,name,age FROM
(
Select id,name,age
From Student
Where age < 15
Order by name
)
UNION ALL
Select id,name,age
From Student
Where Name like "%a%"
或者(解决Nicholas Carey的评论)你可以保证顶级SELECT是有序的,结果出现在底部SELECT之上,如下所示:
Select id,name,age, 1 as rowOrder
From Student
Where age < 15
UNION
Select id,name,age, 2 as rowOrder
From Student
Where Name like "%a%"
Order by rowOrder, name
答案 3 :(得分:12)
其他答案都是正确的,但我认为值得注意的是,我遇到的地方没有意识到你需要通过别名订购,并确保两个选择的别名相同。那么
select 'foo'
union
select item as `foo`
from myTable
order by `foo`
请注意,我在第一个选择中使用单引号,但在其他选项中使用反引号。
这将为您提供所需的分类。
答案 4 :(得分:10)
Order By
在union
之后应用,所以只是
在语句末尾添加order by
子句:
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like '%a%'
Order By name
答案 5 :(得分:8)
如果我想将排序仅应用于其中一个UNION,如果使用Union all:
Select id,name,age
From Student
Where age < 15
Union all
Select id,name,age
From
(
Select id,name,age
From Student
Where Name like "%a%"
Order by name
)
答案 6 :(得分:2)
如其他答案所述,LAST Union之后的“排序依据”应适用于两个通过Union联接的数据集。
我有两个数据集,但使用不同的表,但使用相同的列。 LAST Union之后的“订购依据”仍然无效。 将ALIAS用于“ order by”中使用的列就可以了。
Select Name, Address for Employee
Union
Select Customer_Name, Address from Customer
order by customer_name; --Won't work
因此解决方案是使用别名“ User_Name”:
Select Name as User_Name, Address for Employee
Union
Select Customer_Name as User_Name, Address from Customer
order by User_Name;
答案 7 :(得分:0)
可以使用:
Select id,name,age
From Student
Where age < 15
Union ALL
SELECT * FROM (Select id,name,age
From Student
Where Name like "%a%")
答案 8 :(得分:0)
要将ORDER BY或LIMIT子句应用于单个SELECT,请在SELECT上加上括号,并将该子句放在括号内:
(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
答案 9 :(得分:0)
在查询中添加一列,该列可以标识要排序的数据。
在下面的示例中,我将通用表表达式与您显示的选择一起使用,将它们放置在CTE中的特定组中,然后对这两个组进行union
进入AllStudents
。
然后,最终选择将首先对 总而言之,它将首先获取所有按组进行排序的学生,然后按组内的名称对子进行排序。AllStudents
列中的SortIndex
进行排序,然后对name
的进行排序,例如: / p>
WITH Juveniles as
(
Select 1 as [SortIndex], id,name,age From Student
Where age < 15
),
AStudents as
(
Select 2 as [SortIndex], id,name,age From Student
Where Name like "%a%"
),
AllStudents as
(
select * from Juveniles
union
select * from AStudents
)
select * from AllStudents
sort by [SortIndex], name;