我有一个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
有任何方法可以达到这个目的吗?
答案 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);