【问题标题】:How do I order groups by each group's highest value如何按每个组的最高值对组进行排序
【发布时间】:2020-11-21 08:55:02
【问题描述】:

我有数据:

query url score  
a www.google.com 3  
a www.facebook.com 2  
a www.google.com 1

我想按域对条目进行“分组”,然后按每个组的最高分对域组进行排序(降序),这样我就得到了:

query url score  
a www.google.com 3  
a www.google.com 1
a www.facebook.com 2  

尝试:按分数 desc 从表顺序中选择 *,url asc 不起作用。它给出(没有明显变化):

query url score  
a www.google.com 3  
a www.facebook.com 2  
a www.google.com 1

【问题讨论】:

  • 继续。尝试一下。
  • 尝试按分数排序,然后按域排序,例如“ORDER BY FIELD1 ASC,FIELD2 ASC”

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


【解决方案1】:

您可以使用窗口函数 - 如果您运行的是 MySQL 8.0:

select *
from mytable
order by max(score) over(partition by url) desc, score desc

在早期版本中,一个选项使用子查询:

select *
from mytable t
order by 
    (select max(score) from mytable t1 where t1.url = t.url) desc,
    score desc

【讨论】:

  • 嘿@GMB 我使用的是 Mac,我的 mysql 版本是 5.7.26,我只有一个表,所以第二个选项对我来说没有意义。
  • @scon:第二个查询是您所需要的。它从同一个表中选择两次,称为mytable。请试一试。
  • 嘿@GMB 我很抱歉。非常感谢您(您的回答和鼓励我尝试),我已经在这个问题上挂了一段时间了。你是冠军。
猜你喜欢
  • 2014-07-09
  • 2020-04-20
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多