【问题标题】:Order by two columns in opposite direction in SQLite在 SQLite 中按相反方向的两列排序
【发布时间】:2020-07-30 08:50:06
【问题描述】:

我有价格表:

CREATE TABLE IF NOT EXISTS price (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    shop INTEGER NOT NULL,
    product INTEGER NOT NULL,
    delivery VARCHAR(100),
    score REAL,
    opinions INTEGER,
    avaiable INTEGER,
    price REAL,
    time INTEGER NOT NULL,
    FOREIGN KEY(shop) REFERENCES shop(id),
    FOREIGN KEY(product) REFERENCES product(id),
    FOREIGN KEY(time) REFERENCES time(id)
);

我需要显示价格,但订单应该从大到小得分,意见从大到小,但价格应该从小到大相反。

这不起作用:

select score, opinions, shop.name, price from price
left join shop on shop.id = price.shop
order by score asc, price desc;

在 SQLite 中可以吗?

我的数据如下所示:

4.5 |  3380 | abfoto.pl         | 9199.0
5.0 |  1304 | cyfrowe.pl        | 9299.0
5.0 |   744 | fotoforma.pl      | 9399.0
5.0 |   199 | fotopanorama.pl   | 9099.0
4.0 |   911 | empik.com         | 9099.0
5.0 |  3847 | komputronik.pl    | 9190.0
5.0 |  1053 | sferis.pl         | 9199.0
5.0 |   578 | fotoplus.pl       | 9199.0
5.0 |    24 | e-oko.pl          | 9199.0
5.0 |    55 | foto-kolodziej.pl | 9299.0
5.0 |   164 | foto-szop.pl      | 9299.0
5.0 | 47139 | allegro.pl        | 9347.77
5.0 |   526 | fotosoft.pl       | 9399.0
4.5 |  7129 | mall.pl           | 9401.0
5.0 |   144 | fotostrada.pl     | 9499.0

顶部应该有5.0|fotopanorama.pl|9099.0

【问题讨论】:

  • 您似乎知道 ASC 和 DESC 的用途。所以如果你想要分数从大到小,意见从大到小,但价格应该从小到大相反为什么你的代码中有:score asc, price desc

标签: sql sqlite sql-order-by


【解决方案1】:

订单应该从大到小打分,意见从大到小,但价格应该从小到大相反。

我想你想要:

order by score + 0 desc, opininon desc, price

请注意,由于score 存储为字符串,因此在排序之前将其转换为数字会更安全(因此使用了+ 0)。

【讨论】:

  • + 0 的目的是什么?
  • @a_horse_with_no_name: 那是因为该列在表中定义为字符串...
  • 你真的可以在 SQLite 中为字符串添加数字吗?听起来很吓人
  • 得分为字符串,旧数据库错误地将其作为“5 / 5”,这就是为什么它是字符串。它应该是一个数字。您可以将其从答案中删除,我会更新问题。
  • @a_horse_with_no_name:在我看来,这是一个存储为字符串的数字。 + 0 隐式转换为数字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
相关资源
最近更新 更多