【问题标题】:Order mysql table rows by value from generated column从生成的列中按值对 mysql 表行排序
【发布时间】:2016-08-06 21:06:36
【问题描述】:

这里是MYSQL菜鸟,请多多包涵。

我有一个名为 Cars 的表,用于存储有关汽车的数据:

  • 制作
  • 型号
  • MPG
  • 价格
  • 座位数

我有一张名为priority 的表格,它以 0-5 的等级存储了每种汽车特性对我的重要性。所以这张表可能看起来像:

+-----+-------+-------+ | MPG | Price | Seats | +-----+-------+-------+ | 0 | 2 | 3 | +-----+-------+-------+

我希望能够为每个Car 生成一个分数,如下所示:

score = (car.MPG * priority.MPG) + (car.Price * priority.Price) + (car.seats * priority.seats)

我想基本上做一个Select * from cars order by score。但我不确定如何形成这个查询。

非常感谢您的帮助。

【问题讨论】:

    标签: mysql stored-procedures sql-order-by stored-functions


    【解决方案1】:

    尝试使用

    select a.* from cars a, priority b order by ((a.mpg* b.mpg)+(a.price*b.price)+(a.seats*b.seats))
    

    【讨论】:

    • 这很好用。我想知道,如果我的评分系统变得更复杂,有没有办法可以将它存储为一个函数并以某种方式调用它?
    • 是的...您可以创建一个函数 CREATE FUNCTION score(your parameters...(mpg..price...seats... )) RETURNS INT BEGIN 您的评分系统.. . 返回值.. END;... 您的查询将调用此函数.. select a.* from cars a order by score(a.mpg,a.price,a.seats)
    【解决方案2】:

    您必须将主选择包装到另一个包含 order 子句的选择中。像这样的:

    SELECT * FROM (SELECT c.*, ((c.MPG * priority.MPG) + (c.Price * priority.Price) + (c.seats * priority.seats)) AS score FROM cars) x ORDER BY x.score
    

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 2014-04-26
      • 1970-01-01
      • 2010-10-05
      • 2014-03-12
      • 1970-01-01
      相关资源
      最近更新 更多