让我们假设我的数据库表结构类似于
| items | weight |
|============|==========|
| item_1 | 50 |
| item_2 | 90 |
| item_2 | 45 |
| item_2 | 60 |
| item_3 | 40 |
在select语句中,我想仅显示一个权重最高的项目,也按高度排序。所以结果应该是:
| items | weight |
|============|==========|
| item_2 | 90 |
| item_1 | 50 |
| item_3 | 40 |
我试过像
这样的东西SELECT DISTINCT items, weight FROM mytable ORDER BY weight DESC
但它没有用,因为结果实际上是截然不同的。
如何进行选择?
答案 0 :(得分:4)
您希望按items
分组您的记录。
SELECT items, MAX(weight)
FROM mytable
GROUP BY items
ORDER BY MAX(weight) DESC
在sqlfiddle上查看。
答案 1 :(得分:3)
select items, max(weight)
from mytable
group by items
答案 2 :(得分:2)
SELECT items, MAX(weight) AS weight FROM mytable GROUP BY items ORDER BY weight DESC
Aggregate Functions
SELECT MAX
语法从列中获取最大的结果,只是使用它会过滤掉一个具有最高权重的结果,这就是为什么然后使用GROUP BY
将结果分成匹配结果和{{{ 1}}适用于所有这些。
MAX
也有订购结果的便利副产品(但总是GROUP BY
),但是在这种情况下,它会订购错误的列,因此您必须添加自己的{{1} }。
我使用AS为max列创建别名以保持整洁,否则你必须记住该列将被称为ASC
。
答案 3 :(得分:1)
你想要一个小组:
select item, max(weight) as weight
from mytable
group by item
order by 2 desc