【问题标题】:Union Select from sorted tableUnion 从排序表中选择
【发布时间】:2019-01-14 02:02:03
【问题描述】:

我想同时从一个排序表中执行多个 SELECT。我的想法如下:

SELECT TOP 5 * FROM unsorted_table where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
UNION
SELECT TOP 5 * FROM unsorted_table where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

但由于 ORDER BY,它显然不起作用。我也试过这个,但没有成功:

SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)
UNION
SELECT TOP 5 * FROM (SELECT * FROM unsorted_table where where parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC)

如果我使用了以下内容,正如这里其他线程所推荐的那样,我没有得到我需要的东西,因为表格在最后进行了排序:

SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

另一个限制是,我不能创建新表。因此,将排序后的表保存在新表中并从中选择也不是一个选项。

【问题讨论】:

  • 标记您正在使用的 DBMS(即MySQL、SQL Server 等...)。

标签: sql sql-server sql-order-by union


【解决方案1】:

使用子查询试试这个:

select * from 
(SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 1
UNION
SELECT TOP 5 * FROM unsorted_table WHERE parameter1 = 2)a
ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC

【讨论】:

    【解决方案2】:

    尝试使用 WITH:

    WITH xy AS (
    SELECT TOP 5 * 
      FROM unsorted_table 
     WHERE parameter1 = 1 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
    ),
    yz AS (
    SELECT TOP 5 * 
      FROM unsorted_table 
     WHERE parameter1 = 2 ORDER BY parameter2 DESC, paramter3 DESC, parameter4 ASC
    )
    SELECT * FROM xy
    UNION
    SELECT * FROM yz
    

    【讨论】:

      【解决方案3】:

      你似乎想要:

      select u.*
      from (select *, row_number() over (partition by parameter1 order by parameter2 desc, paramter3 desc, parameter4) seq
            from unsorted_table 
            where parameter1 in (1,2)
           ) u
      where seq <= 5;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-06
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多