많은 선택에서 데이터를 가져오고 결합 할 때 주문할 수 있습니까? 와 같은
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
그러나이 경우 나는 그 해결책을 무시합니다.
답변
그냥 써
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는 전체 결과 집합에 적용됩니다
답변
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
답변
정렬을 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
답변
다른 답변은 모두 정확하지만, 내가 붙어있는 곳은 별칭으로 주문해야한다는 것을 깨닫지 못하고 별칭이 두 선택 모두에 대해 동일한 지 확인해야한다는 점에 주목할 가치가 있다고 생각했습니다.
select 'foo'
union
select item as `foo`
from myTable
order by `foo`
첫 번째 선택에서는 작은 따옴표를 사용하지만 다른 따옴표에는 백틱을 사용하고 있습니다.
그러면 필요한 정렬이 가능합니다.
답변
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
답변
Union all을 사용하면 정렬을 UNION 중 하나에 만 적용하려면 다음을 수행하십시오.
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
)
답변
다른 답변에서 언급했듯이 LAST Union 이후 ‘Order by’는 Union으로 결합 된 두 데이터 세트에 적용해야합니다.
두 개의 데이터 세트가 있었지만 다른 테이블을 사용하지만 동일한 열을 사용했습니다. LAST Union이 계속 작동 한 후 ‘주문 기준’. ‘order by’에 사용 된 열에 대해 ALIAS를 사용하면 트릭이 발생했습니다.
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;