SQL 按分组排序
SQL Order by grouping
我有一列 rating
,编号为 0 - 1000
我想按 rating ASC
对这些行进行排序,但我希望如果评级在 0-99 之间,它们将具有相同的排序顺序(100-199、200-299 等相同)。这些组我想在从 DB
返回时随机化
SQL可以吗?
示例:
这是初始table
这是按 rating asc
定期订购后的 table
以100步为一组进行排序,然后随机化
可能尝试使用偏移量
例子
SELECT rating FROM ratingtable ORDER BY rating ASC LIMIT 100 OFFSET 0;
这将显示 1-100 之间的评分
要显示 101-200 之间的评分,只需将偏移量设置为 100
只需将评分除以 100,然后使用 random()
:
SELECT
*
FROM
T
ORDER BY Rating/100,random()
假设 Rating
是一个整数,除法会自动将结果截断为整数,因此可以轻松地将 199/100
和 101/100
视为 1
.
不太明白你想要达到什么目的,但我认为你应该尝试使用 OVER PARTITION。试试这个:
SELECT rating, userid, rank() OVER (PARTITION BY 100 ORDER BY rating ASC) FROM ratingtable ;
我有一列 rating
,编号为 0 - 1000
我想按 rating ASC
对这些行进行排序,但我希望如果评级在 0-99 之间,它们将具有相同的排序顺序(100-199、200-299 等相同)。这些组我想在从 DB
SQL可以吗?
示例:
这是初始table
这是按 rating asc
定期订购后的 table以100步为一组进行排序,然后随机化
可能尝试使用偏移量
例子
SELECT rating FROM ratingtable ORDER BY rating ASC LIMIT 100 OFFSET 0;
这将显示 1-100 之间的评分
要显示 101-200 之间的评分,只需将偏移量设置为 100
只需将评分除以 100,然后使用 random()
:
SELECT
*
FROM
T
ORDER BY Rating/100,random()
假设 Rating
是一个整数,除法会自动将结果截断为整数,因此可以轻松地将 199/100
和 101/100
视为 1
.
不太明白你想要达到什么目的,但我认为你应该尝试使用 OVER PARTITION。试试这个:
SELECT rating, userid, rank() OVER (PARTITION BY 100 ORDER BY rating ASC) FROM ratingtable ;