从一列中选择前3位语句顺序,其余列由另一列选择

时间:2015-06-15 08:10:38

标签: sqlite

我需要使用两种不同的排序器。我想根据柱子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

Fiddle

1 个答案:

答案 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
)
相关问题