【问题标题】:how to sort result by giving different weight to each column?如何通过给每一列赋予不同的权重来对结果进行排序?
【发布时间】:2015-11-21 05:55:33
【问题描述】:

我想对来自 sql 数据库(mysql 或 sql server)的结果进行排序。但是有不止一列,例如每一列都有不同的权重来排序

SELECT F1,F2,F3 FROM mytable ORDER BY (F1*2+F2*7+F3)

但我担心处理时间太长,因为我的数据库可能有数百万条记录,所以对这么多数据进行排序并为所有记录计算公式可能会非常慢,我怎样才能更快地做到这一点??

编辑:这些重量数字不是恒定的

【问题讨论】:

  • 您可以添加一个新的索引列 weight 并创建一个触发器来计算每次插入/更新时的值。然后只需按重量排序。

标签: mysql sql-server logic


【解决方案1】:

如果你的数字是不变的,那么创建一个computed column

ALTER TABLE mytable
   ADD O_ComputedColumn AS (F1*2+F2*7+F3) PERSISTED

Here 是使计算列Persisted 的一些优点

查询:

SELECT F1,F2,F3 
FROM mytable 
ORDER BY O_ComputedColumn

这是给Sql Server的。没试过试试看

【讨论】:

  • 我试过了,它有效。我喜欢这个简单的解决方案。只需保存计算
  • 我的号码不是固定的,因为我是从用户那里得到的
【解决方案2】:

@MM93,这个主意不错。 看,还有 2 种方法可以实现这一点。但两者都需要更多信息。

1.拉出所有想要的行不排序。然后在前端排序。这可能很快。

  1. 这样写你的查询,
  2. SELECT F1,F2,F3,F1*2+F2*7+F3 as NewColumn FROM mytable

然后在前端进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-08
    相关资源
    最近更新 更多