MYSQL查询语句中的Order By与Group By一起使用

3

我有以下简单的SQL语句

SELECT id, name, value_name, value_id
FROM table
GROUP BY id
ORDER BY value_id DESC

当进行分组时,我希望获取value_id最大的元组中的value_name和value_id。目前的情况是我获取到了最小值。例如:
1, name1, valuename, 3     (where i know that there is a value_id of 5)

请问您能帮忙吗?

4个回答

4

在字段列表中将value_id更改为MAX(value_id) AS value_id...

实际上,现在我看看,我认为你想要的是这样的:

SELECT a.id, a.name, MAX(b.value_id) AS value_id, (SELECT b.value_name FROM table AS b WHERE b.id = a.id AND b.value_id = MAX(a.value_id)) AS value_name
FROM table AS a 
GROUP BY a.id, a.name
ORDER BY value_id DESC

问题在于表没有完全规范化。因此,您有多个具有相同id和name的行,但每个行都有唯一的value_id和value_name。因此,获取与value_id关联的value_name的唯一方法是通过子查询(我在那里所做的)或连接...

你需要按照其他非聚合字段进行分组。 - Will Marcouiller
@irchmaxell 他仍然需要在group by子句中添加name和value_name。 - AieshaDot
实际上,我刚意识到他是在询问与MAX(value_id)相关联的value_name。编辑答案以相应... - ircmaxell

1
SELECT id, name, value_name, MAX(value_id )
FROM table 
GROUP BY id, name, value_name
ORDER BY value_id DESC

0
-- MySQL
select
 city, length(city) 
from station  
group by city 
having length(city)=(select min(length(city)) from station) order by city ASC limit 1;

select
 city, length(city) 
from station group by city having length(city)=(select max(length(city)) from station)
limit 1;

你的回答可以通过提供更多的支持性信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的回答是否正确。你可以在帮助中心找到有关如何撰写好的回答的更多信息。 - undefined

-1

您可以通过以下语句获取最大的value_id:

SELECT id, name, value_name, value_id
FROM table
GROUP BY value_id 
HAVING max(value_id)

如果您想获得其他列,可以使用子查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接