我的数据库times_seen
和times_answered_correctly
中有两个整数列。
现在我想选择所有已经超过100次的元素,并通过数学运算(times_answered_correctly / times_seen
)对它们进行排序。
我正在使用以下代码,该代码有效并且不会出现任何错误:
top_10_hardest = db_session.query(QuizItems).filter(QuizItems.times_seen >= 100).order_by(QuizItems.times_answered_correctly / QuizItems.times_seen).all()
我还尝试了.order_by(asc(QuizItems.times_answered_correctly / QuizItems.times_seen))
和desc()
。结果发生了变化,但仍然随机排列。
{% for i in top_10_hardest %}
<p> {{ i.times_answered_correctly/i.times_seen }} </p>
{% endfor %}
给出:
0.9858490566037735
0.8082788671023965
0.7952941176470588
0.9202127659574468
0.7591623036649214
0.9950980392156863
0.9907621247113164
0.9905660377358491
0.39420935412026725
0.9931506849315068
为什么它不起作用?
答案 0 :(得分:1)
问题是列是Integer
列,尽管.order_by(asc(QuizItems.times_answered_correctly / QuizItems.times_seen)
中没有错误,但所有值都已四舍五入为整数,即1
或{{1} }
在视图功能中,我将结果显示为:
0
这是我第一次做正确的数学运算,但是在订购商品之前,请记住订单功能不起作用,因为它将元素视为整数。
<强> SOLUTION:强>
我用<p> {{ i.times_answered_correctly/i.times_seen }} </p>
函数解决了这个问题。我将cast()
元素投放到Integer
函数中的Float
:
order_by()