簡體   English   中英

SQL在排序后選擇前Y個中的X個隨機行

[英]SQL selecting X random rows within top Y after ordering

我希望使用MYSQL選擇

1)按“價格”列排序后的前20行中有5個隨機行

2)按“價格”列排序后的30個下一個結果(第21-50行)中的15個隨機行

用SQL實現這種性能的最佳方法是什么? 請注意,該表包含大約1,000,000行。

最終目的是為這些隨機選擇的行更新一列(SET status = 1)。

使用嵌套選擇-在這種情況下應該很快

select * from 
(
select .... from table 
order by price
limit X, Y
)
order by random

用適當的值替換X和Y

請注意,根據特定的RDBMS,“隨機順序”和“限制”子句可能有所不同! 這是MySQL的方式。

最重要的是,服務器將首先執行內部選擇,這將僅返回20-30行(取決於limit子句),您可以在外部選擇中以隨機順序對其進行排序。 如果將價格列編入索引,這將足夠快

  ( SELECT dt.*
    FROM 
      ( SELECT t.*                    -- columns you need from the table
        FROM tableX AS t              -- your table name in place of "tableX"
        ORDER BY price DESC
          LIMIT 20
          OFFSET 0
      ) AS dt
    ORDER BY RAND()
      LIMIT 5
  )
  UNION ALL 
  (
    SELECT dt.*
    FROM 
      ( SELECT t.* 
        FROM tableX AS t 
        ORDER BY price DESC
          LIMIT 30
          OFFSET 20
      ) AS dt
    ORDER BY RAND()
      LIMIT 15
   ) ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM