MySQL订单不订购

时间:2010-09-05 06:53:29

标签: mysql sql-order-by

我得到了两个评级评分的项目,并使用ORDER BY键按顺序排序,但是有一个示例表:

//(item)-(pos)-(neg):
item 1 - 50 - 200
item 2 - 24 - 0
item 3 - 15 - 12

但是第1项的评分确实低于其他项目,我该如何解决?

3 个答案:

答案 0 :(得分:2)

您可以通过从neg中减去pos来找到净得分,然后按该净得分排序。计算它,然后给它一个别名,我们称之为net

mysql> SELECT item, pos, neg, (pos - neg) AS net
    -> FROM table
    -> ORDER BY net DESC;
+------+-----+-----+------+
| item | pos | neg | net  |
+------+-----+-----+------+
|    2 |  24 |   0 |   24 |
|    3 |  15 |  12 |    3 |
|    1 |  50 | 200 | -150 |
+------+-----+-----+------+
3 rows in set (0.00 sec)

答案 1 :(得分:2)

你可以ORDER BY pos - neg DESC但它会很慢,因为它不能使用索引。

您可以通过在表中显式存储pos - neg的值来对数据库进行非规范化,以便您可以对其进行索引以提高性能。通常,非规范化被认为是一件坏事,应该避免,但如果它需要改进的性能,那么这是一种可接受的方法。

答案 2 :(得分:0)

是的,你可以按顺序使用数学。

ORDER BY pos-neg DESC

但要确保pos和neg不是UNSIGNED!因为当他们试图消极时你会得到最大的结果;)