You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中多列反向排序实现:price表排序需求问询

问题分析与解决

首先明确:SQLite完全支持你需要的多条件排序规则,你的问题出在ORDER BY子句的方向设置错误,并且缺少了opinions的排序条件。

原查询的问题

你给出的排序语句是:

order by score asc, price desc;

这和你的需求完全相悖:

  • 你需要score从大到小,却用了asc(升序,从小到大),应该改为desc(降序);
  • 你需要price从小到大,却用了desc(降序,从大到小),应该改为asc;
  • 完全漏掉了opinions从大到小的排序条件,这会导致同score的行无法按照评论数优先级排序。

符合你描述需求的正确SQL

按照你指定的score从大到小 → opinions从大到小 → price从小到大优先级,正确的查询语句是:

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

匹配你期望首行的调整方案

不过看你的示例数据,如果你期望首行是5.0 | fotopanorama.pl | 9099.0,那上面的语句可能不会得到这个结果——因为在所有score=5.0的行里,allegro.pl的opinions(47139)是最大的,会排在最前面。

如果你的实际需求是优先按score降序,然后price升序,最后opinions降序(这样fotopanorama.pl的最低价格会让它排在5.0分组的第一位),那对应的SQL应该是:

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

用你的示例数据测试这条语句,score=5.0的行里,price最低的fotopanorama.pl(9099.0)会成为结果的首行,完全符合你的期望。

内容的提问来源于stack exchange,提问作者jcubic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:57:58