sql面试题

在这里插入图片描述

-- 建表
DROP TABLE IF EXISTS `gcode`;
CREATE TABLE `gcode`  (
  `gcode` int(255) NULL DEFAULT NULL COMMENT '商品id',
  `gname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '商品名称',
  `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '分类'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;


-- ----------------------------
-- Table structure for purorder
-- ----------------------------
DROP TABLE IF EXISTS `purorder`;
CREATE TABLE `purorder`  (
  `id` int(11) NOT NULL COMMENT '主键id',
  `gcode` int(255) NULL DEFAULT NULL COMMENT '商品id',
  `qty` int(11) NULL DEFAULT NULL COMMENT '采购数量',
  `rmb` decimal(65, 0) NULL DEFAULT NULL COMMENT '采购金额rmb',
  `odate` date NULL DEFAULT NULL COMMENT '采购日期',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;


-- ----------------------------
-- Table structure for salorder
-- ----------------------------
DROP TABLE IF EXISTS `salorder`;
CREATE TABLE `salorder`  (
  `id` int(11) NOT NULL COMMENT '主键id',
  `gcode` int(255) NULL DEFAULT NULL COMMENT '商品id',
  `qty` int(11) NOT NULL COMMENT '销售数量',
  `rmb` decimal(20, 0) NULL DEFAULT NULL COMMENT '销售金额',
  `odate` date NOT NULL COMMENT '销售日期',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;


-- 1
SELECT * FROM SALORDER  SA   JOIN  GCODE GC  ON  GC.GCODE=SA.GCODE  WHERE gc.gname='商品1' ;


-- 2  id, gc.gcode,qty,rmb,odate,gname,type
select id, gc.gcode,qty,rmb,odate,gname,type from 
		PURORDER  PU  , GCODE GC  ,
		(SELECT  count(*) as sum  FROM PURORDER  PU  JOIN GCODE GC ON GC.GCODE=PU.GCODE 
					WHERE GC.TYPE='A001' AND DATE_FORMAT(ODATE,'%Y-%m-%d')>='2022-01-01' ) a
	WHERE GC.GCODE=PU.GCODE  and GC.TYPE='A001' AND DATE_FORMAT(ODATE,'%Y-%m-%d')>='2022-01-01'
	AND a.sum >=2


-- 3. 

select g.*, inventory
from gcode g,
     (select gcode, sum(pqty) - sum(sqty) inventory
      from (
               select p.gcode gcode, p.qty pqty, s.qty sqty
               from purorder p,
                    salorder s
               where p.gcode = s.gcode
                 and date_format(p.odate, '%Y-%m-%d') <= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d')
                 and date_format(s.odate, '%Y-%m-%d') <= DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 DAY), '%Y-%m-%d')) a
      group by gcode) b
where b.inventory >= 1000
  and g.gcode = b.gcode;
	
	
select g.*, inventory
from gcode g,
     (select gcode, sum(pqty) - sum(sqty) inventory
      from (
               select p.gcode gcode, p.qty pqty, s.qty sqty
               from purorder p,
                    salorder s
               where p.gcode = s.gcode
                 and date_format(p.odate, '%Y-%m-%d') <= DATE_SUB(SYSDATE(), INTERVAL 1 DAY)
                 and date_format(s.odate, '%Y-%m-%d') <= DATE_SUB(SYSDATE(), INTERVAL 1 DAY)) a
      group by gcode having  sum(pqty) - sum(sqty)>=1000) b
where  g.gcode = b.gcode;


--  4.
select '采购' as 'name', a.aa as '数量', a.rmb as '价格', g.*
from gcode g,
(select p.gcode, sum(p.rmb) rmb, sum(p.qty) aa from purorder p group by p.gcode   order by aa desc limit 10 ) a 
where  a.gcode =  g.gcode 
union all
select  '销售' as 'name',  b.bb as '数量' ,  b.rmb as '价格', g.*
from gcode g,
(select s.gcode, sum(s.rmb) rmb, sum(s.qty) bb from salorder s group by s.gcode order by bb desc limit 10  ) b 
where  b.gcode = g.gcode;



select * from (
select '采购' name, p.gcode, sum(p.qty) pqty, sum(p.rmb) prmb, @rownum := @rownum + 1 rink
from purorder p,
     (select @rownum := 0) b
group by p.gcode
order by pqty desc
limit 10  ) a 
union 
select * from(
select '销售' name, p.gcode, sum(p.qty) pqty, sum(p.rmb) prmb, @rownum02 := @rownum02 + 1 rink
from salorder p,
     (select @rownum02 := 0) b
group by p.gcode
order by pqty desc
limit 10 ) b;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值