找到了一个非常类似的帖子,之后我又去了。 how to sort order of LEFT JOIN in SQL query?,但我的分布在几张桌子上。
Accounts
acc_id | salesRank | reg_date
1 | 50 | 2018-01-01 07:01:01
2 | 20 | 2019-02-01 07:01:01
Catalogue
cat_id | product_name | brand
1 | torch | Dewalt
2 | MacBook | Apple
3 | Phone | Samsung
Inventory
inv_id | cat_id | acc_id | salePrice | stock
1 | 1 | 1 | 999 | 6
2 | 1 | 2 | 499 | 2
在这里我要说的是:
SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy,
(a.salesRank + i.stock) AS sellersRankTotal
FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id
WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC
我有些需要如何从2个表中的2个值中获取MAX()SellersRank。
我之后是排名最高的卖家(销售额排名+股票)的结果将获得搜索结果中显示的价格。
product_name | brand | acc_id | cat_id | price | sellersRankTotal
torch | Dewalt | 1 | 1 | 999 | 56 (SalesRank + Stock)
我只能假设亚马逊有类似的概念。 显示的价格不一定总是最便宜的,但是具有一定排名的卖家的价格也在其列表中显示。
希望这很有道理, 问候
答案 0 :(得分:0)
听起来好像您只是想以不同的方式控制排序顺序,尽管我不确定100%是否确定是否以某种方式组合了SellersRankTotal和相关性。有多少个源表都没有关系。如果它们以新关系连接在一起,则可以按该结果集中的任何列(或可用于创建计算列的任何表达式)进行排序。
如果您只想按“ a.salesRank + i.stock”进行排序(为您指定了“ sellersRankTotal”的别名),那么只需添加该order by子句(假设您要按相关性优先排序)然后由SellersRankTotal):
SELECT c.cat_id, c.product_name, c.brand, a.salePrice,
MATCH(c.product_name) AGAINST('+dewalt' IN BOOLEAN MODE) AS relevancy,
(a.salesRank + i.stock) AS sellersRankTotal
FROM catalogue AS c
JOIN inventory AS i ON c.cat_id = i.cat_id
JOIN accounts AS a ON i.acc_id = a.acc_id
WHERE ... GROUP BY c.cat_id ORDER BY relevancy DESC, sellersRankTotal DESC