这个有个挺重要的问题,首先必须要确定题量,就是要出多少道题,否则如果单纯根据这个比例,那数据库也没办法判断一共要取多少出来。
所以这个题量一定要确定,确定之后,每种题取多少个也就知道了,同时这个问题也就变得容易了。
分别取出每种题的集合,然后SQLSERVER用TOP N来取N条,ORACLE用WHERE ROWNUM <= N来取前N条,把几种做一个UNION ALL,这样就组合出来了一套题了。
另外,SQLSERVER不能用select top 3*2这样的方法取前六条,会有错误,一定要先确定每种取多少,然后用select top n这样的形式。
select top 总题量*0.3*0.2 * from 表 where 题型='单选题' and 难度='难'
union
select top 总题量*0.3*0.8 * from 表 where 题型='单选题' and 难度='易'
union
select top 总题量*0.7*0.2 * from 表 where 题型='判断题' and 难度='难'
union
select top 总题量*0.7*0.8 * from 表 where 题型='判断题' and 难度='易'
这是sqlserver查询,其中总体量确定,然后算出题数代替“总题量*0.3*0.2” 等
如果是oracle 就是在条件里加rownum<=总题量*0.3*0.2
自己理解吧,你加的条件可以按照上面的代码以此类推
设要选N道题
选概念题且难的题型N*20%*20%
选概念题且简单的题型N*20%*80*
选原理题且难的题型N*30%*20%
选原理题且简单的题型N*30%*80*
以此类推,最后即在总量上实现难度比值为2:8,每个题的比值也为2:8
即某题型数量=该题型难题(总题量*该题型比值*难度占比值)+该题型简单题(总题量*该题型比值*难度占比值)
如果用一条语句的话,感觉很难实现,只有这样一点一点的选了
我的解决办法不是最好的,我对算法不是很了解。所以,我给出一个我解决的这个问题的实现。首先,你做的考试系统应该明确一张考卷一共多少题目。还要同事明确题型和每个题型下的数量。看你的要求很明确了。我们假设一张考卷是100题。然后那,就是判断难度了。实用java数据数,然后确定你的具体题目。这样就可以组装成一张试卷了。我不知道我说的是否清楚