先看看group by 語句的用法
GROUP BY 語句
GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。
SQL GROUP BY 語法 點擊可查看源文
代碼如下 復制代碼SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
在SQL的 語句一起使用同樣數目的SQL聚合函數提供分組的某些數據庫教程表列(第結果數據集方法)。
實例
以下是 test 表,測試sql
代碼如下 復制代碼
CREATE TABLE IF NOT EXISTS `test` (
`id` int(10) unsigned NOT NULL auto_increment,
`install` int(10) unsigned NOT NULL,
`day` int(10) unsigned NOT NULL,
`aid` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
INSERT INTO `test` (`id`, `install`, `day`, `aid`) VALUES
(1, 'www.111cn.net', 20120308, 1),
(2, 2321, 20120309, 2),
(3, 1236, 20120310, 3),
(5, 'www.111cn.net', 20120309, 1),
(6, 2312, 20120310, 1),
(7, 1432, 20120311, 1),
(8, 2421, 20120308, 2),
(9, 4245, 20120311, 2),
(10, 'www.111cn.net', 20120310, 2),
(11, 412, 20120308, 3);
實現sql語句
代碼如下 復制代碼SELECT A.* FROM test A,
(SELECT aid, MAX(day) max_day FROM test GROUP BY aid) B
WHERE A.aid = B.aid AND A.day = B.max_day
ORDER BY a.install DESC
這樣我們只要取集合的還desc排序的第一條就可以了。
再看個mssql server實例
例如 table1(a,b,c,d)
代碼如下 復制代碼a b c d
1 0 c1 d1
1 1 c2 d2
1 3 c3 d3
4 0 c4 d4
5 1 c5 d5
5 2 c6 d6
6 1 c7 d7
6 4 c8 d8
我要得到的是按a分組,在每個分組中取b值最大的一條記錄,就是
代碼如下 復制代碼 a b c d方法一
代碼如下 復制代碼select * from table1 where b in (select max(b) from table1 group by a) ;
方法二
代碼如下 復制代碼select * from table1 a where b=(select max(b) from table1 where a=a.a)
好了就講這麼多了,希望對大家有用。