0

让我们假设我的数据库表结构类似于

|   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

但它不起作用,因为结果实际上是不同的。

我怎样才能做出这样的选择?

4

4 回答 4

4

您想按以下方式对记录进行分组items

SELECT   items, MAX(weight)
FROM     mytable
GROUP BY items
ORDER BY MAX(weight) DESC

sqlfiddle上查看。

于 2012-09-05T21:38:30.860 回答
3
select items, max(weight)
from mytable
group by items
于 2012-09-05T21:38:32.200 回答
2

SELECT items, MAX(weight) AS weight FROM mytable GROUP BY items ORDER BY weight DESC

聚合函数语法从一列 中SELECT MAX获取最大的结果,仅使用它会过滤掉一个权重最高的结果,这就是为什么您然后使用GROUP BY将结果分隔为匹配的结果并将其MAX应用于所有结果的原因。

GROUP BY还具有排序结果的方便副产品(ASC尽管总是如此),但是在这种情况下它会订购错误的列,因此您必须添加自己的ORDER BY.

我会使用 AS 为 max 列创建别名以保持整洁,否则您必须记住该列将被调用MAX(weight)

于 2012-09-05T21:40:15.290 回答
1

你想要一个组:

select item, max(weight) as weight
from mytable
group by item
order by 2 desc
于 2012-09-05T21:38:32.417 回答