使用最大数量按名称对SQL表进行排序

时间:2015-01-29 11:51:47

标签: mysql sql

我有一个SQL选择,返回以下内容:

  Name   Code  Qty
 Janet   10   6
 Janet   11   9
 Janet   09   8
 Jones   12   7
 Jones   11   8
 James   09   5
 James   10   4

我希望根据所有三个人的数量对此选择进行排序:按人数排序最大数量,然后按数量排序。

输出应如下所示:

 Janet   11   9
 Janet   09   8
 Janet   10   6
 Jones   11   8
 Jones   12   7
 James   09   5
 James   10   4

有任何方法可以达到这个目的吗?

4 个答案:

答案 0 :(得分:3)

这是一个微妙的问题。看起来您希望按 qty 的最大值对名称进行排序。这需要加入和聚合才能获得每个qty的最大name

select t.*
from table t join
     (select name, max(qty) as maxq
      from table t
      group by name
     ) tt
order by tt.maxq desc, tt.name, t.qty desc;

答案 1 :(得分:2)

SELECT Name, Code, Qty
FROM names AS main JOIN 
(SELECT Name, MAX(Qty) AS max_qty
 FROM names
 GROUP BY Name) AS max_names USING (Name)
ORDER BY max_names.max_qty DESC, names.Qty DESC

虚拟表格max_names包含每个Qty的最大Name

Janet 9
Jones 8
James 5

然后将其加入原始表并根据此max_qty进行排序。

如果您想根据每个名称的总数进行排序,只需将MAX替换为SUM

SELECT Name, Code, Qty
FROM names AS main JOIN 
(SELECT Name, SUM(Qty) AS sum_qty
 FROM names
 GROUP BY Name) AS sum_names USING (Name)
ORDER BY sum_names.sum_qty DESC, names.Qty DESC

sum_names表格将包含:

Janet 23
Jones 15
James  9

答案 2 :(得分:2)

试试这个:

SELECT * FROM `names` ORDER BY name ASC, qty DESC

答案 3 :(得分:1)

您可以指定多个排序条件:

SELECT * from names order by name, qty desc

以上查询将按name排序,如果名称相等,则按qty排序

如果您只想为每个用户选择更高的数量,请使用此查询:

SELECT name, MAX(qty) FROM names GROUP BY name order by MAX(qty);