SQL Server gets one of the most valued data in each category

Source: Internet
Author: User

SQL Server gets one of the most valued data in each category

?
12345678910111213141516171819202122232425262728293031323334353637383940414243 /* 数据如下: 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    4   b4b4 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‘) go   --一、按name分组取val最大的值所在行的数据。 --方法1: select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name--方法2: select a.* from tb a where not exists(select 1 from tb where name = a.name and val > a.val) --方法3: 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--方法4: 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--方法5 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 */   

Notation 6

SELECT * FROM (SELECT *, Row_number () + (PARTITION by name ORDER by Val DESC) RID from TB) as T WHERE RID = 1

If there is more than two of the same Val in a name group above, query method 1-5 is incorrect.

For example:

INSERT into TB values (' A ', 2, ' A2 (second value of a) ')
INSERT into TB values (' A ', 3, ' A1--a's first value ')
INSERT into TB values (' A ', 3, ' A3:a's third value ')

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.