关于sql中常用到入门级Group By和聚合函数的笔记
1.这是一个保存用户登录信息的表:
| ID |
NAME |
TIME |
| 1 | wayne | 2008-02-02 00:00:00.000 |
| 2 | wayne | 2008-02-02 00:00:00.000 |
| 3 | tom | 2009-03-20 00:00:00.000 |
| 4 | tom | 2009-01-20 00:00:00.000 |
| 5 | tom | 2009-03-20 00:00:00.000 |
| 6 | jack | 2008-03-02 00:00:00.000 |
| 7 | jack | 2009-02-02 00:00:00.000 |
| 8 | lucy | 2008-02-04 00:00:00.000 |
要求:根据每个登录用户的最新时间检索出登录名和时间,like this:
jack 2009-02-02 00:00:00.000
lucy 2008-02-04 00:00:00.000
tom 2009-03-20 00:00:00.000
wayne 2008-02-02 00:00:00.000
分析:这是根据name来分组检索最新时间的查询语句,所以group by conditions NAME,and max(TIME),so this sql is
select [name],max([time]) from Table_Name group by [name]
2.根据上面的例子延伸出一个报价表:
| ID |
NAME |
TIME |
PRICE |
| 1 | wayne | 2008-02-02 00:00:00.000 | 2.00 |
| 2 | wayne | 2008-02-02 00:00:00.000 | 20.00 |
| 3 | tom | 2009-03-20 00:00:00.000 | 3.00 |
| 4 | tom | 2009-01-20 00:00:00.000 | 12.00 |
| 5 | tom | 2009-03-20 00:00:00.000 | 123.00 |
| 6 | jack | 2008-03-02 00:00:00.000 | 3.00 |
| 7 | jack | 2009-02-02 00:00:00.000 | 4.00 |
| 8 | lucy | 2008-02-04 00:00:00.000 | 5.00 |
条件:1.每个报价人的最新时间 2.在最新时间的情况下得到每个报价人的最高报价,like this:
jack 4.00
lucy 5.00
tom 123.00
wayne 20.00
分析:第一先要等到最新时间,根据time和name匹配最大的price,这样我们需要写inner join 到上一个例子中,
select a.name,max(price) from Table_Name as a
inner join (select name ,max(time) as time from Table_Name group by name) as b
on a.name=b.name and a.time=b.time group by a.name
浙公网安备 33010602011771号