求某列第二hive取最大值所在行行的SQL

sql 按某一字段分组取最大(小)值所在行的数据 - 为程序员服务
为程序员服务
按某一字段分组取最大(小)值所在行的数据
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 5 b5b5b5b5b5
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
--一、按name分组取val最大的值所在行的数据。
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name
select a.* from tb a where not exists(select 1 from tb where name = a.name and val & a.val)
select a.* from tb a,(select name,max(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
select a.* from tb a inner join (select name , max(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
select a.* from tb a where 1 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name
name val memo
---------- ----------- --------------------
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
--二、按name分组取val最小的值所在行的数据。
select a.* from tb a where val = (select min(val) from tb where name = a.name) order by a.name
select a.* from tb a where not exists(select 1 from tb where name = a.name and val & a.val)
select a.* from tb a,(select name,min(val) val from tb group by name) b where a.name = b.name and a.val = b.val order by a.name
select a.* from tb a inner join (select name , min(val) val from tb group by name) b on a.name = b.name and a.val = b.val order by a.name
select a.* from tb a where 1 & (select count(*) from tb where name = a.name and val & a.val) order by a.name
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
--三、按name分组取第一次出现的行所在的数据。
select a.* from tb a where val = (select top 1 val from tb where name = a.name) order by a.name
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
--四、按name分组随机取一条数据。
select a.* from tb a where val = (select top 1 val from tb where name = a.name order by newid()) order by a.name
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 5 b5b5b5b5b5
--五、按name分组取最小的两个(N个)val
select a.* from tb a where 2 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val & a.val having Count(*) & 2) order by a.name
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
a 2 a2(a的第二个值)
b 1 b1--b的第一个值
b 2 b2b2b2b2
--六、按name分组取最大的两个(N个)val
select a.* from tb a where 2 & (select count(*) from tb where name = a.name and val & a.val ) order by a.name,a.val
select a.* from tb a where val in (select top 2 val from tb where name=a.name order by val desc) order by a.name,a.val
select a.* from tb a where exists (select count(*) from tb where name = a.name and val & a.val having Count(*) & 2) order by a.name
name val memo
---------- ----------- --------------------
a 2 a2(a的第二个值)
a 3 a3:a的第三个值
b 5 b5b5b5b5b5
--七,如果整行数据有重复,所有的列都相同。
数据如下:
name val memo
a 2 a2(a的第二个值)
a 1 a1--a的第一个值
a 1 a1--a的第一个值
a 3 a3:a的第三个值
a 3 a3:a的第三个值
b 1 b1--b的第一个值
b 3 b3:b的第三个值
b 2 b2b2b2b2
b 5 b5b5b5b5b5
--在sql server 2000中只能用一个临时表来解决,生成一个自增列,先对val取最大或最小,然后再通过自增列来取数据。
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
select * , px = identity(int,1,1) into tmp from tb
select m.name,m.val,m.memo from
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) m where px = (select min(px) from
select t.* from tmp t where val = (select min(val) from tmp where name = t.name)
) n where n.name = m.name)
drop table tb,tmp
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
(2 行受影响)
--在sql server 2005中可以使用row_number函数,不需要使用临时表。
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a', 2, 'a2(a的第二个值)')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 1, 'a1--a的第一个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('a', 3, 'a3:a的第三个值')
insert into tb values('b', 1, 'b1--b的第一个值')
insert into tb values('b', 3, 'b3:b的第三个值')
insert into tb values('b', 2, 'b2b2b2b2')
insert into tb values('b', 4, 'b4b4')
insert into tb values('b', 5, 'b5b5b5b5b5')
select m.name,m.val,m.memo from
select * , px = row_number() over(order by name , val) from tb
) m where px = (select min(px) from
select * , px = row_number() over(order by name , val) from tb
) n where n.name = m.name)
drop table tb
name val memo
---------- ----------- --------------------
a 1 a1--a的第一个值
b 1 b1--b的第一个值
(2 行受影响)
您可能的代码
相关聚客文章
相关专栏文章SQL查询语句中一列中的某一项的最大值怎么写?_百度知道
SQL查询语句中一列中的某一项的最大值怎么写?
查询“干果和坚果”这一类别的产品中最贵的产品记录,应该怎么写这句查询语句啊我写的是select*from产品where价格=(selectmax(价格)from产品groupby类别having类别='干果和坚果')为什...
查询“干果和坚果”这一类别的产品中最贵的产品记录,应该怎么写这句查询语句啊我写的是select * from产品 where价格=(select max(价格) from 产品group by 类别having类别='干果和坚果' )为什么查询结果出现了别的类别?求解释。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证行家
健身类行家
采纳数:145426
获赞数:628465
select max(价格) from 产品group by 类别having类别='干果和坚果'& --这个代表坚果和干果里最贵的价钱&但你这样以后select * from产品 where价格=(select max(价格) from 产品group by 类别having类别='干果和坚果' )就是所有产品里的价格为40块钱的,所以你还要加一个限制条件&select&*&from&产品&where价格=(select&max(价格)&from&产品group&by&类别&having类别='干果和坚果'&)&and&类别='干果和坚果'
前面不是已经要求了类别了吗怎么还是所有产品的最贵产品呢,这个地方不懂啊。。
恩,这样给你看select max(价格) from 产品group by 类别 having类别='干果和坚果'
--这句的运行结果是40 所以你上边的语句可以改成 select * from 产品 where 价格=40 这样没错吧,但是这样你就没选到分类 所以我那种写法就是 select * from 产品 where 价格=40
and 类别='干果和坚果' 这样你懂了吗?
我的意思是前面已经有having语句了为什么不是直接显示特定的“干果和坚果”呢
因为你那个having在子查询里,对外边的查询类别='干果和坚果' 不生效啊
嗷嗷知道了,可是为什么去掉也不行呢
在子查询去掉的话,你把select max(价格) from 产品group by 类别这句单独运行下,它会显示每个类别的最高价格,而你外边用的等于号,肯定会报错,子查询返回多个行什么的 如果等号改成in的话,可以执行通过,但是返回的所有物品中,价格在这些当中的所有记录,你理解一下这几句话的意思
来自电脑网络类芝麻团
采纳数:224
获赞数:230
参与团队:
写的好复杂!既然条件明确,用:SELECT TOP 1 *
FROM 产品 WHERE (类别 = '干果和坚果') ORDER BY 价格 DESC岂不是更简单?
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。sql数据库如何获取某个字段里的最大值及明细_百度知道
sql数据库如何获取某个字段里的最大值及明细
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
来自知道合伙人认证团队
采纳数:152
获赞数:646
擅长:暂未定制
使用类似如下语句找出 某个表中 某个字段 在你的某条件下,为最大的一条记录:SELECTMAX(字段)FORM表格1WHERE你的条件--或用下面查看这条记录里所有的字段的情况SELECT*FORM表格1WHERE字段IN(SELECTMAX(字段)FORM表格1WHERE你的条件)至于 “及明细”,就不知道你是什么想法了,如果是所有记录,那就直接列出所有记录就好:SELECT*FORM表格1WHERE你的条件即:select max(Age) from Student用max函数可以计算出相应字段的最大值
来自电脑网络类芝麻团
采纳数:3992
获赞数:33212
参与团队:
使用类似如下语句找出 某个表中 某个字段 在你的某条件下,为最大的一条记录:SELECT&MAX(字段)&FORM&表格1&WHERE&你的条件--或用下面查看这条记录里所有的字段的情况SELECT&*&FORM&表格1&WHERE&字段&IN&(SELECT&MAX(字段)&FORM&表格1&WHERE&你的条件)至于 “及明细”,就不知道你是什么想法了,如果是所有记录,那就直接列出所有记录就好:SELECT&*&FORM&表格1&WHERE&你的条件
本回答被提问者和网友采纳
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。SQL怎么选择一列中的不重复值,另一列中最大值的那行_百度知道
SQL怎么选择一列中的不重复值,另一列中最大值的那行
举例说明:表格如这样的ABa1a2b2b3其中A,B为列名,我想选出a,2和b,3两行(如题目)用SQL语句怎么写啊?就是选择出第一列每一个值对应的第二列的最大值。谢谢各位了。...
举例说明:表格如这样的A
3其中A,B为列名,我想选出a, 2和b,3两行(如题目)用SQL语句怎么写啊?就是选择出第一列每一个值对应的第二列的最大值。谢谢各位了。
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:2265
获赞数:7940
select A,max(B) as B from tab group by A
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。sql语句 查询表中某一列的最大值所在的行,给出所在行_百度知道
sql语句 查询表中某一列的最大值所在的行,给出所在行
比如table:PersonIDNamemoney1ace查询结果应该为4d...
比如table:PersonID
Name money1
a 20002 b 22003 c 40004 d 42005 e 42006 f 3000查询结果应该为4 d 42005 e 4200
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
<span class="wgt-replyer-all-uname
" data-href="https://zhidao.baidu.com/usercenter?uid=da705e82920
<span class="wgt-replyer-all-card-name3 wgt-replyer-all-card-names" data-href="https://zhidao.baidu.com/usercenter?uid=da705e82920
采纳数:31
获赞数:116
擅长:暂未定制
一、select * from Person where money=( select max(money) from
Person) id
不是顺序的话 oracle
sqlServer 用 rownum()over(oderby )mYSQl
黑夜霞光丶
黑夜霞光丶
采纳数:55
获赞数:470
select * from Person order by money desc 按照money排序,desc是反向排序,结果如下,4 d 42005 e 42003 c 40006 f 30002 b 22001 a 2000
爱琴海之玲
来自电脑网络类芝麻团
爱琴海之玲
采纳数:228
获赞数:2366
参与团队:
select id,name,max(money) from person
1条折叠回答
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 a所在的行和列已经出现了 的文章

 

随机推荐