【问题标题】:How to order by and then arrange on the basis of common column element [closed]如何根据常见的列元素排序然后排列[关闭]
【发布时间】:2020-11-14 03:37:09
【问题描述】:

我有一张包含 'sold','name' 和 'mer_id' 列的产品表,我想根据已售出的数量排列产品,如果它们具有相似的 mer_id 则将它们分组,这将确保最已售出的产品与其他具有相同 mer_id 的产品一起出现在顶部。

sold | mer_id | name
------------------------
6    |   7  | iphone
3    |   2  | ipad
1    |   7  | macbook air
5    |   3  | mackbook pro
6    |   2  | iwatch 

我想要的结果:

sold | mer_id | name
------------------------
6    |   7  | iphone
1    |   7  | mackbook air
6    |   2  | iwatch
3    |   2  | ipad
5    |   3  | mackbook pro 

我不明白该怎么做。

【问题讨论】:

  • 这么简单的ORDER BY mer_id, sold DESC?
  • 先生,我想先显示拥有最多销量产品的商家 ID

标签: mysql sql sql-order-by window-functions


【解决方案1】:

我想首先显示销售数量最多的商品的商家 ID

如果您运行的是 MySQL 8.0,您可以使用窗口函数来执行此操作:

select *
from mytable
order by sum(sold) over(partition by mer_id) desc, sold desc

在早期版本中,您可以使用关联子查询:

select t.*
from mytable t
order by 
    (select sum(t1.sold) from mytable t1 where t1.mer_id = t.mer_id) desc, 
    sold desc   

【讨论】:

  • 这是在“over(partition by mer_id) desc, sold desc”附近的语句中抛出语法错误
  • @aryanagarwal:您运行的 MySQL 版本早于 8.0。请参阅我的更新答案。
  • 这会产生不正确的输出,一切都是混合的
  • 在下单后,我希望将具有相同商家 ID 的产品放在一起,这样我将有销售数量最多的商家 ID 和其他产品在顶部,以类似的方式其他行将跟进
  • 当 sum 被 max 取代时,我得到了想要的结果,谢谢!
猜你喜欢
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
相关资源
最近更新 更多