如何在SQL查询中对LEFT JOIN(多个表)的顺序进行排序?

时间:2019-05-16 19:06:25

标签: mysql sql

找到了一个非常类似的帖子,之后我又去了。 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)

我只能假设亚马逊有类似的概念。 显示的价格不一定总是最便宜的,但是具有一定排名的卖家的价格也在其列表中显示。

希望这很有道理, 问候

1 个答案:

答案 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