mysql 状态选择_MYSQL选择状态按分组顺序排序(MYSQL Select statment Order By with Group By)...

MYSQL选择状态按分组顺序排序(MYSQL Select statment Order By with Group By)

我有以下简单的SQL语句

SELECT id, name, value_name, value_id

FROM table

GROUP BY id

ORDER BY value_id DESC

分组时我想得到元组的value_name和value_id,其中value_id是最大的。 我的方式是获得最小的价值。 例如

1, name1, valuename, 3 (where i know that there is a value_id of 5)

你能帮忙吗?

I have the following simple SQL statment

SELECT id, name, value_name, value_id

FROM table

GROUP BY id

ORDER BY value_id DESC

when grouping I would like to get the value_name and value_id of the tuple where the value_id is the biggest. The way it is i am getting the smallest value. For example

1, name1, valuename, 3 (where i know that there is a value_id of 5)

Can you please help?

原文:https://stackoverflow.com/questions/2884688

更新时间:2019-11-11 05:23

最满意答案

更改, 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,名称相同的行,但每个行都有唯一的value_id和value_name。 因此,获取与value_id关联的value_name的唯一方法是通过子查询(我在那里做的)或连接...

change , value_id to , MAX(value_id) AS value_id in the field list...

Actually, now that I look at it, I think what you want is something like this:

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

The problem is that the table isn't fully normalized. So you have multiple rows with id and name being the same, but each has a unique value_id and value_name. So the only ways to get the value_name associated with the value_id is either through a subquery (what I did there), or a join...

2010-05-21

相关问答

更改, 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

...

select wp_posts.* from wp_posts where wp_posts.post_status='publish'and wp_posts.post_type='post' group by wp_posts.post_author having wp_posts.post_date = MAX(wp_posts.post_date) /* ONLY THE LAST POST FOR EACH AUTHOR */ order by wp_posts.post_date de

...

一个简单的解决方案是首先将查询包含在具有ORDER语句的子选择中,然后再应用GROUP BY: SELECT * FROM (

SELECT `timestamp`, `fromEmail`, `subject`

FROM `incomingEmails`

ORDER BY `timestamp` DESC

) AS tmp_table GROUP BY LOWER(`fromEmail`)

这与使用连接类似,但看起来更好。 在SELECT中使用GROUP BY子句的

...

在子查询中使用ORDER BY不是解决此问题的最佳方法。 获取作者max(post_date)的最佳解决方案是使用子查询返回最大日期,然后在post_author和最大日期post_author其加入到表中。 解决办法应该是: SELECT p1.*

FROM wp_posts p1

INNER JOIN

(

SELECT max(post_date) MaxPostDate, post_author

FROM wp_posts

WHERE post_status='pu

...

你得到1行而不是6行的原因是你是通过语法滥用mysql独特的轻松组(我不会详细介绍,但你不是所有非聚合列的分组 - 通常是语法错误)。 基本上你想要最早的两行连接,你可以根据自己的意愿弯曲这个独特的功能: select a.*, b.cost AS future_cost, b.start_date AS future_date

from (select * from (select * from testdata order by start_date) x group by pattern)

...

从手册 : 如果使用GROUP BY,则输出行将根据GROUP BY列进行排序,就好像您具有相同列的ORDER BY一样。 为了避免GROUP BY生成的排序开销,添加ORDER BY NULL: SELECT a, COUNT(b) FROM test_table GROUP BY a ORDER BY NULL;

不推荐依赖于隐式GROUP BY排序(即,在没有ASC或DESC指示符的情况下进行排序)。 要生成给定的排序顺序,请对GROUP BY列使用显式ASC或DESC指示符,或者提供OR

...

这可能工作(未测试): SELECT CASE

WHEN name = 'ciao' THEN 'ciao'

ELSE 'not ciao'

END as NAME,

COUNT(*)

FROM table

GROUP BY CASE

WHEN name = 'ciao' THEN 'ciao'

ELSE 'not ciao'

END

OR在MySQL中 S

...

您不能在group by子句中使用参数,您可以使用参数构建查询字符串。 像这样的东西。 DECLARE @group nvarchar(50) = N'Age_Band'; --set col name

DECLARE @SQLString nvarchar(500);

SET @SQLString =

N'SELECT AVG(Loan_Amount) as Avg_Loan_Amount

,count(Loan_Amount)

,SUM(Loan_Amount) as Su

...

你可以使用MAX()聚合函数和GROUP BY一样 select `user`, max(permission_a) as permission_a,

max(permission_b) as permission_b

from permission

group by `user`;

You can probably use MAX() aggregate function with GROUP BY like select `user`, max(permission_a) as permis

...

试试: select sales_people.person_id, last_name, first_name, sales_region.Region_id, trim(sales_region.name) AS 'Region Name'

from sales_region

inner join sales_people_region on sales_people_region.region_id = sales_region.region_id

inner jo

...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值