博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql先分组,然后取每个分组中的第2大的记录
阅读量:6715 次
发布时间:2019-06-25

本文共 2392 字,大约阅读时间需要 7 分钟。

文章参考http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/

首先建表:

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `fruit`
-- ----------------------------
DROP TABLE IF EXISTS `fruit`;
CREATE TABLE `fruit` (
`type` varchar(10) NOT NULL,
`variety` varchar(20) NOT NULL,
`price` double(10,2) NOT NULL,
PRIMARY KEY (`type`,`variety`),
KEY `type` (`type`,`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of fruit
-- ----------------------------
INSERT INTO `fruit` VALUES ('apple', 'fuji', '0.24');

INSERT INTO `fruit` VALUES ('apple', 'gala', '2.79');

INSERT INTO `fruit` VALUES ('apple', 'limbertwing', '2.87');

INSERT INTO `fruit` VALUES ('apple', 'seswe', '3.84');

--------------------------------------------------------------------

INSERT INTO `fruit` VALUES ('cherry', 'bing', '2.55');

INSERT INTO `fruit` VALUES ('cherry', 'chelan', '6.33');

INSERT INTO `fruit` VALUES ('cherry', 'drtan', '7.33');

INSERT INTO `fruit` VALUES ('cherry', 'drtyd', '7.87');

---------------------------------------------------------------------

INSERT INTO `fruit` VALUES ('orange', 'valencia', '3.59');

INSERT INTO `fruit` VALUES ('orange', 'navel', '9.36');

INSERT INTO `fruit` VALUES ('orange', 'vcxss', '9.43');

INSERT INTO `fruit` VALUES ('orange', 'vbng', '11.33');

INSERT INTO `fruit` VALUES ('orange', 'cccbn', '21.36');

--------------------------------------------------------------------

INSERT INTO `fruit` VALUES ('pear', 'bartlett', '2.14');

INSERT INTO `fruit` VALUES ('pear', 'bradford', '6.05');

INSERT INTO `fruit` VALUES ('pear', 'ddssa', '8.54');

INSERT INTO `fruit` VALUES ('pear', 'rtyug', '9.07');

然后希望得到每种水果中价格第二高的数据,即:

+--------+------------+-------+| type   | variety    | price |+--------+------------+-------+| apple  | limbertwig |  2.87 | | cherry | drtan      |  7.33 | | orange | vbng       | 11.33 | | pear   | ddssa      |  8.54 | +--------+------------+-------+ 参考如下sql语句:

SELECT t.type,MIN(t.price) price FROM(SELECT

    a.type,a.price
    FROM fruit a
    WHERE
      2 >= (
          SELECT
          COUNT(*)
          FROM
          fruit b
          WHERE
          a.type= b.type
          AND a.price <= b.price
         )
    ORDER BY
    a.type,
    a.price)t

GROUP BY type

本sql使用了两重子查询,效率较低。请高人指点~

转载于:https://www.cnblogs.com/damour-damocles/p/4975243.html

你可能感兴趣的文章
鸟哥?马哥?靠边站!今天猫哥带你玩千万PV级别运维架构实战
查看>>
欢迎加入Java私活外包QQ群
查看>>
Python风靡全宇宙,首要原因是它?
查看>>
Win7部署基础知识(8):使用WDS捕获与应用映像
查看>>
企业云桌面-14-将vCenter 6.5证书导入-受信任人-企业
查看>>
Python从菜鸟到高手(13):分片(Slicing)
查看>>
实战操作百度文库、百度经验营销,让您的“流量”稳居首页
查看>>
KMS激活服务器inactivity exceeded threshold警报处理
查看>>
IT草根的江湖之路之五:鉴于现实,屈服!
查看>>
拇指接龙游戏从WIN32向Android移植过程问题记录(1)
查看>>
2011年春季-C语言课程设计-报告格式
查看>>
sql之group by分析
查看>>
简单的webservice调用(天气预报)
查看>>
使用NdbUnit更新数据报“违反并发性 updatecommand 影响了预期 1 条记录中的 0 条”错误的原因...
查看>>
基于ArcGIS10.0和Oracle10g的空间数据管理平台十五(C#开发)-空间数据导出
查看>>
DB2 应用
查看>>
第十六章 为什么说张清“虎头蛇尾”
查看>>
ShiftOperators.cs
查看>>
C#中的预处理命令
查看>>
K-means聚类算法(非MapReduce实现)
查看>>