有N多的部门,取出每个部门销售冠军和季军
*部门数不确定
*没有季军的情况下,只显示冠军
 
--
-- テーブルの構造 `test`
--CREATE TABLE IF NOT EXISTS `test` (
  `part` varchar(100) NOT NULL,
  `name` varchar(100) NOT NULL,
  `sell` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;--
-- テーブルのデータをダンプしています `test`
--INSERT INTO `test` (`part`, `name`, `sell`) VALUES
('A', 'zhang', 120),
('A', 'li', 240),
('A', 'wang', 307),
('B', 'zhao', 180),
('C', 'qian', 426),
('C', 'gu', 500),
('C', 'qi', 230),
('D', 'ka', 144),
('E', 'liao', 351),
('E', 'pao', 401);
 

解决方案 »

  1.   

    MySQL5环境,不知道4是否一样找冠军:
    mysql> select part, name, sell
        -> from test a
        -> where not exists (select 1
        ->   from test b
        ->   where b.part=a.part
        ->   and b.name!=a.name
        ->   and b.sell>a.sell);
    +------+------+------+
    | part | name | sell |
    +------+------+------+
    | A    | wang |  307 |
    | B    | zhao |  180 |
    | C    | gu   |  500 |
    | D    | ka   |  144 |
    | E    | pao  |  401 |
    +------+------+------+
    5 rows in set (0.01 sec)
      

  2.   

    前两名:
    mysql> select part, name, sell
        -> from test a
        -> where (select count(1)
        ->  from test b
        ->  where b.part=a.part
        ->  and b.name!=a.name
        ->  and b.sell>a.sell)<2
        -> order by part, sell desc;
    +------+------+------+
    | part | name | sell |
    +------+------+------+
    | A    | wang |  307 |
    | A    | li   |  240 |
    | B    | zhao |  180 |
    | C    | gu   |  500 |
    | C    | qian |  426 |
    | D    | ka   |  144 |
    | E    | pao  |  401 |
    | E    | liao |  351 |
    +------+------+------+
    8 rows in set (0.00 sec)
      

  3.   

    参考:
    http://blog.chinaunix.net/u/29134/showart_465578.html