SQLite 如何均匀乱序?

纪飞 Jackie 2011-11-14 10:31:22
SQLite 如何均匀乱序?

如下面的记录:

AAA
AAA
AAA
BBB
BBB
BBB
CCC
CCC
DDD
DDD
EEE
EEE
FFF
FFF

要求结果如下:

AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB

记录中每个重复项的数量应该是不相同的,要求最大限度均匀分布在查询结果集里。。。
举个例子,一个市的考生考试,最好把不同学校的考生均匀分布在不同的考场,每个学校的考生的数量是不一样的。。。
...全文
254 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2011-11-16
  • 打赏
  • 举报
回复
[Quote]再举个例子:比如有 100根 3 种 颜色的筷子,但是每种颜色的数量不一样,如:
红:50 根
绿:30 根
蓝:20 根[/Quote]如果手工排,你会怎么排?步骤是什么? 这个关键是算法。要把自己的算法操作总结出来。
纪飞 Jackie 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 acmain_chm 的回复:]

一般排考场很少用SQL语句来实现。 都是用程序来实现。

另外你提到的这个问题。20个DDD,则你要先确定出具体的算法,比如手工排,会按照什么样的原则来排?
[/Quote]
想要的结果是 相同项不挨着就行,其他的没要求,均匀分布在记录记录集里,如下所示,DDD 虽然多,但是也均匀分布在记录集里了:

DDD
AAA
DDD
BBB
DDD
CCC
DDD
EEE
DDD
FFF
DDD
AAA
DDD
BBB
DDD
CCC
DDD
EEE
DDD
FFF
DDD
AAA
BBB
DDD

再举个例子:比如有 100根 3 种 颜色的筷子,但是每种颜色的数量不一样,如:
红:50 根
绿:30 根
蓝:20 根

如何把它排列均匀,看上每个地方都不会特殊,都由那几种颜色的筷子组成
WWWWA 2011-11-15
  • 打赏
  • 举报
回复
用你上述数据,加入自增字段ID,字段名为ZZ
select * from (
select a.zz,a.id,count(b.id) as bz from aa3 a left join aa3 b on a.zz=b.zz and a.id>=b.id group by
a.zz,a.id) a order by bz,zz
ACMAIN_CHM 2011-11-15
  • 打赏
  • 举报
回复
sqlite> select * from t_HackerJLY order by id;
1|AAA
2|AAA
3|AAA
4|BBB
5|BBB
6|BBB
7|CCC
8|CCC
9|DDD
10|DDD
11|EEE
12|EEE
13|FFF
14|FFF
sqlite>

sqlite> select *
...> from t_HackerJLY a
...> order by (select count(*) from t_HackerJLY Where school=a.school and i
d<= a.id );
1|AAA
4|BBB
7|CCC
11|EEE
13|FFF
9|DDD
2|AAA
5|BBB
8|CCC
10|DDD
12|EEE
14|FFF
3|AAA
6|BBB
sqlite>
加油馒头 2011-11-15
  • 打赏
  • 举报
回复
这个要求还真有点搞,在程序里处理比较方便
ACMAIN_CHM 2011-11-15
  • 打赏
  • 举报
回复
一般排考场很少用SQL语句来实现。 都是用程序来实现。

另外你提到的这个问题。20个DDD,则你要先确定出具体的算法,比如手工排,会按照什么样的原则来排?
纪飞 Jackie 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wwwwb 的回复:]

用SQL语句无法做到,建议用代码解决
[/Quote]
我现在也怀疑 用 SQL 能否办到,即使办到的话,速度估计也快不了。。。
wwwwb 2011-11-15
  • 打赏
  • 举报
回复
用SQL语句无法做到,建议用代码解决
纪飞 Jackie 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wwwwb 的回复:]

引用 6 楼 hackerjly 的回复:
引用 4 楼 wwwwa 的回复:

用你上述数据,加入自增字段ID,字段名为ZZ
select * from (
select a.zz,a.id,count(b.id) as bz from aa3 a left join aa3 b on a.zz=b.zz and a.id>=b.id group by
a.zz,a.id) a o……
[/Quote]
1、建立了 字段名 ZZ 是 Unique 索引 和 FID 是 Primary Key,我的数据有 14万多条,用 SQLite Expert Personal 3 执行的语句,SQLite Expert Personal 3在基本上没反应了...
2、想要的结果是 只要相同的名字不挨着,尽量的分开 就行。。。最好分布均匀
wwwwb 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hackerjly 的回复:]
引用 4 楼 wwwwa 的回复:

用你上述数据,加入自增字段ID,字段名为ZZ
select * from (
select a.zz,a.id,count(b.id) as bz from aa3 a left join aa3 b on a.zz=b.zz and a.id>=b.id group by
a.zz,a.id) a order by bz,zz


这个可以达……
[/Quote]
1、在相应的字段上建立索引没有;
2、用你6楼 数据,要求结果是什么
纪飞 Jackie 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwwwa 的回复:]

用你上述数据,加入自增字段ID,字段名为ZZ
select * from (
select a.zz,a.id,count(b.id) as bz from aa3 a left join aa3 b on a.zz=b.zz and a.id>=b.id group by
a.zz,a.id) a order by bz,zz
[/Quote]

这个可以达到效果,但是如果记录中DDD太多了,如20个,那查询的结果的最后,就都是 DDD 了。。。
而且如果记录数特别多的话,速度不能接受。。。

如下所示:

AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
纪飞 Jackie 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]

SQL code
sqlite> select * from t_HackerJLY order by id;
1|AAA
2|AAA
3|AAA
4|BBB
5|BBB
6|BBB
7|CCC
8|CCC
9|DDD
10|DDD
11|EEE
12|EEE
13|FFF
14|FFF
sqlite>

sqlite> select *
...> from t_HackerJLY a
……
[/Quote]

这个可以达到效果,但是如果记录中DDD太多了,如20个,那查询的结果的最后,就都是 DDD 了。。。
而且如果记录数特别多的话,速度不能接受。。。

如下所示:

AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB
CCC
DDD
EEE
FFF
AAA
BBB
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
DDD
纪飞 Jackie 2011-11-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acmain_chm 的回复:]

select * from table order by random()
[/Quote]

这个我试过了,出来的太乱了,相同的项在记录里并不是均匀分步的,而且这个语句每次查出来的结果都不一样
我上面说还是有点规律的。。。
我想每次查出来的记录顺序都不变。。。
ACMAIN_CHM 2011-11-14
  • 打赏
  • 举报
回复
select * from table order by random()

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧