MySql逻辑顺序依据

4 php mysql sql logic laravel

我目前有这样的查询:

SELECT 'id', 'clanid', 'name',
       'level', 'exp', 'warwinpercent',
       'warswon', 'warslost', 'warstied',
       'playercount', 'score'
FROM clans
WHERE warswon >= 100
ORDER BY warwinpercent DESC, warswon DESC;
Run Code Online (Sandbox Code Playgroud)

现在这样有效,但最终它不像我希望的那样合乎逻辑......

例如.

假设有一排战争胜率为99.5738%,赢得了208战.而另一个拥有100%战争赢率和103场战争赢得了胜利.

我希望99%的行高于100%的行.我有什么办法让这个工作吗?

我所拥有的等式是:

warinpercent = warswon/(warswon+warstied+warlost)*100
order by warwinpercent
if warwinpercent are in a range of 3% then order by warswon between them.
Run Code Online (Sandbox Code Playgroud)

Luk*_*zda 7

我建议使用像中的订购 How Not To Sort By Average Rating

问题:

你需要某种"得分"来排序.

错误的解决方案#1:得分=(正评级) - (负评级)

错误的解决方案#2:得分=平均评级=(正评级)/(总评级)

正确的解决方案:得分=伯努利参数的威尔逊得分置信区间的下限

在此输入图像描述

演示:

CREATE TABLE clans(id INT, name VARCHAR(100), warswon INT, warslost INT);

INSERT INTO clans VALUES (1, 'aaa',  208, 6), (2, 'bbb', 103, 0);

SELECT id, name,warswon, warslost,((warswon + 1.9208) / (warswon + warslost) - 
                 1.96 * SQRT((warswon * warslost) / (warswon + warslost) + 0.9604) / 
                          (warswon + warslost)) / (1 + 3.8416 / (warswon + warslost)) 
       AS ci_lower_bound 
FROM clans 
ORDER BY ci_lower_bound DESC;
Run Code Online (Sandbox Code Playgroud)

SqlFiddleDemo

输出:

???????????????????????????????????????????????????????????
? id  ? name  ? warswon  ? warslost  ?   ci_lower_bound   ?
???????????????????????????????????????????????????????????
?  2  ? bbb   ?     103  ?        0  ? 0.9640439675800224 ?
?  1  ? aaa   ?     208  ?        6  ? 0.9401908847803808 ?
???????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)