我需要使用两种不同的排序器。我想根据柱子PopularitySortOrder ASC选择前三名,其余由SortOrder ASC选择。
表格
---------------------------------------------------------------------------------------
| Id | Product | Price | SortOrder | PopularitySortOrder |
---------------------------------------------------------------------------------------
1 Samsung Galaxy S6 Edge 100 1 2
2 iPhone 6 100 2 1
3 iPhone 5S 100 4 4
4 Samsung Galaxy S6 100 6 3
5 Google Nexus 6 100 3 5
6 Google Nexus 5 100 5 7
我尝试过以下选择,不成功的尝试:
select *
FROM
(
select * from Temp1 t1 order by PopularitySortOrder LIMIT 3
union all
select * from Temp1 t2 where t2.Id <> t1.Id order by SortOrder
)
order by PopularitySortOrder, SortOrder asc
预期结果:
---------------------------------------------------------------------------------------
| Id | Product | Price | SortOrder | PopularitySortOrder |
---------------------------------------------------------------------------------------
2 iPhone 6 100 2 1 *
1 Samsung Galaxy S6 Edge 100 1 2 *
4 Samsung Galaxy S6 100 6 3 *
5 Google Nexus 6 100 3 * 5
3 iPhone 5S 100 4 * 4
6 Google Nexus 5 100 5 * 7
编辑:使用SQLite版本3.7
答案 0 :(得分:1)
t1
在UNION查询的其他部分中不可见。
您可以复制热门程序查询,或使用临时视图,或(在SQLite 3.8.3或更高版本中)common table expression:
WITH MostPopular3 AS (
SELECT * FROM Temp
ORDER BY PopularitySortOrder
LIMIT 3
)
SELECT * FROM MostPopular3
UNION ALL
SELECT * FROM (
SELECT * FROM Temp
WHERE Id NOT IN (SELECT Id FROM MostPopular3)
ORDER BY SortOrder
)