MySQL嵌套查询实例(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kunpeng1987/article/details/60585431

问题:

存在如下2张表,数据一次如下,goods(商品表),orders(销售订单表),假定一个订单只能购买一种商品。

左边为goods(商品表),右边为orders(销售订单表)。

   

要求:用MySQL语句实现,查出2017年2月份,商品月销售总额大于10000元,金额排名前三的商品名称以及金额。

首先创建表,

①商品表的创建
DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `price` decimal(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='商品表';
插入一些测试数据
INSERT INTO `goods` VALUES ('1', '笔记本', '5000.00');
INSERT INTO `goods` VALUES ('2', '手机', '2000.00');
INSERT INTO `goods` VALUES ('3', '平板电脑', '3000.00');
INSERT INTO `goods` VALUES ('4', '单反相机', '10000.00');
INSERT INTO `goods` VALUES ('5', '投影仪', '6000.00');
②订单表的创建
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `gid` int(10) unsigned NOT NULL COMMENT '商品ID',
  `num` int(10) unsigned NOT NULL COMMENT '订单数量',
  `create_time` int(10) unsigned NOT NULL COMMENT '订单时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COMMENT='订单表';
同样插入一些测试数据

INSERT INTO `orders` VALUES ('1', '2', '1', '1486224001');
INSERT INTO `orders` VALUES ('2', '1', '1', '1483545600');
INSERT INTO `orders` VALUES ('3', '2', '1', '1486224002');
INSERT INTO `orders` VALUES ('4', '3', '2', '1486224003');
INSERT INTO `orders` VALUES ('5', '3', '2', '1486224004');
INSERT INTO `orders` VALUES ('6', '3', '3', '1483545600');
INSERT INTO `orders` VALUES ('7', '1', '3', '1486224005');
INSERT INTO `orders` VALUES ('8', '2', '4', '1483545600');
INSERT INTO `orders` VALUES ('9', '1', '1', '1486224006');
INSERT INTO `orders` VALUES ('10', '1', '4', '1486224007');
INSERT INTO `orders` VALUES ('11', '2', '2', '1483545600');
INSERT INTO `orders` VALUES ('12', '3', '3', '1486224008');
INSERT INTO `orders` VALUES ('13', '3', '1', '1483545600');
INSERT INTO `orders` VALUES ('14', '2', '1', '1486224009');
INSERT INTO `orders` VALUES ('15', '2', '3', '1483545600');
INSERT INTO `orders` VALUES ('16', '2', '2', '1486224010');
INSERT INTO `orders` VALUES ('17', '2', '1', '1483545600');
INSERT INTO `orders` VALUES ('18', '1', '1', '1486224011');
INSERT INTO `orders` VALUES ('19', '1', '2', '1486224012');
INSERT INTO `orders` VALUES ('20', '3', '1', '1486224013');
INSERT INTO `orders` VALUES ('21', '1', '1', '1486224014');
INSERT INTO `orders` VALUES ('22', '5', '1', '1486224015');
INSERT INTO `orders` VALUES ('23', '5', '1', '1486224016');
INSERT INTO `orders` VALUES ('24', '4', '2', '1486224017');
INSERT INTO `orders` VALUES ('25', '5', '1', '1486224018');
INSERT INTO `orders` VALUES ('26', '5', '2', '1486224019');
然后分布进行查询:

第一步:先查询出2017年2月份的订单,SQL语句如下

SELECT g.*,o.num,o.create_time FROM orders o LEFT JOIN goods g ON o.gid=g.id
WHERE FROM_UNIXTIME(create_time,'%Y-%m')='2017-02';
查询部分结果如图,
第二步:查询2月份每种商品的销售数量,销售总额
SELECT t.id,t.name,t.price,sum(t.num)as total,sum(t.num)*t.price as total_price FROM(
    SELECT g.*,o.num,o.create_time FROM orders o LEFT JOIN goods g ON o.gid=g.id 
WHERE FROM_UNIXTIME(create_time,'%Y-%m')='2017-02')as t  GROUP BY t.id;
查询结果见下图,
最后:查询出销售总额大于10000元,金额排名前三的商品名称以及金额
SELECT tt.name,tt.total_price FROM(
SELECT t.id,t.name,t.price,sum(t.num)as total,sum(t.num)*t.price as total_price FROM(
SELECT g.*,o.num,o.create_time FROM orders o LEFT JOIN goods g ON o.gid=g.id 
WHERE FROM_UNIXTIME(create_time,'%Y-%m')='2017-02')as t  GROUP BY t.id)as tt 
WHERE tt.total_price>10000 ORDER BY tt.total_price DESC LIMIT 3;
结果如下图,
本文为作者原创,转载请备注来源,谢谢合作!



猜你喜欢

转载自blog.csdn.net/kunpeng1987/article/details/60585431
今日推荐