1

大きなSQL構造を単純にするために:私は次の構造を持っています:

id    level    answercorrect    points
1     1        0                0
2     1        1                60
3     1        1                80
4     1        1                77
5     1        1                92
6     1        0                0
7     2        0                0
8     2        0                0
9     2        0                0
10    2        1                80
11    2        0                0
12    2        0                0

ここで、2つのことを表示したいと思います。

1)完了したレベルの数(これは正しい質問の最小半分です)

2)最も多くのポイントを獲得したレベル。

これで、レベルごとに手動でクエリを実行し、それらを比較して出力することができます。

SELECT (*) FROM QUESTIONS WHERE LEVEL = level AND ANSWERCORRECT = 1

しかし、これをより迅速に行う方法はありますか?私の途中でそれを達成するためのコードの大きな束のように思えます..?

4

1 に答える 1

2

これにより、各レベルが回答数と正解数とともに表示されます。

select level, 
    count(*) as totalquestions, 
    sum (answercorrect) as correctanswers,
    sum (points) as totalpoints
from yourtable
group by level
having sum (answercorrect) >= (count(*)/2)
order by sum (points) desc

または

select level,  
    count(*) as totalquestions,  
    sum (answercorrect) as correctanswers, 
    sum (points) as totalpoints,
    case when sum (answercorrect) >= (count(*)/2) then 1 else 0 end as completed
from yourtable 
group by level 
order by sum (points) desc 

ポイント=0が正しくないことを意味し、ポイント> 0が正しいことを意味する場合、ポイントと正確さを保存することは不要のようです。

于 2012-10-10T08:06:45.967 に答える