题库里很多题目,每个题都有各自的分值score。
求一条sql语句:从题库中挑选出一组分值和为100分的id(假设题库里有和值为100分的组合)另外如果出现题库里没有和值100分的情况,可以如何处理呢?
(我想法是挑选出分值和最接近100的一组id,然后将其中一道题的分值在前端显示时,加上或者减少与100的分差,这么凑100。
比如:挑选出一组和为99的id,随机将其中一道5分的题在页面显示时变为6分,凑成100总分。)不知道挑选出分值和最接近100的一组id,这个能通过sql语句实现没?当然如果大家有更好的想法可以说下。谢谢了!

解决方案 »

  1.   

    这个一般是通过程序实现。 仅用SQL语句无法实现。
      

  2.   

    如果是程序的话,用java语言写怎么简单一点。感觉这个貌似有点涉及回溯算法。。求高人指教
      

  3.   

    没办法,只能用背包算法。 从N件重量不等的物品中,选出正好10KG的物品。你可以先把题库中的题目随便排列出来 select * from xxx order by rand(); 然后利用传统的背包算法抽出100题。 一般是用递归。
    第一次见到这种题库。 常见的都是 把题分为几类,比如单选,多选,判断。 这样几类,但每一类中的题目都是分值相同的。 这样也就是抽取固定数目的题即可。
      

  4.   

    select *,col1+col2+col3 as n
    from tb 
    where col1+col2+col3<=100
    order by n desc
    limit 10;