一个sql笔试题

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

 第一步建表:

插入备用数据

CREATE TABLE `test1` (
  `book_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  `book_name` varchar(32) DEFAULT NULL COMMENT '书名',
  `anthor` varchar(32) DEFAULT NULL COMMENT '作者',
  `publisher` varchar(32) DEFAULT NULL COMMENT '出版社',
  `version` varchar(32) DEFAULT NULL COMMENT '版本号',
  `price` decimal(10,2) DEFAULT NULL COMMENT '价格',
  PRIMARY KEY (`book_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

INSERT INTO `test`.`Test1` (`book_id`, `book_name`, `anthor`, `publisher`, `version`, `price`) VALUES ('1', '外婆的道歉信', 'aa', '清华出版社', '2', '11.20');
INSERT INTO `test`.`Test1` (`book_id`, `book_name`, `anthor`, `publisher`, `version`, `price`) VALUES ('3', '魔鬼', 'bb', '出版社', '3', '27.00');
INSERT INTO `test`.`Test1` (`book_id`, `book_name`, `anthor`, `publisher`, `version`, `price`) VALUES ('5', '天使', 's', '出版社', '4', '26.00');




CREATE TABLE `test2` (
  `bid` int(11) NOT NULL COMMENT '编号',
  `date` datetime NOT NULL COMMENT '销售日期',
  `place` varchar(32) NOT NULL COMMENT '销售点',
  `number` int(11) DEFAULT NULL COMMENT '数量',
  `id` int(11) DEFAULT NULL,
  PRIMARY KEY (`bid`,`date`,`place`),
  CONSTRAINT `test2_ibfk_1` FOREIGN KEY (`bid`) REFERENCES `test1` (`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO `test`.`Test2` (`bid`, `date`, `place`, `number`, `id`) VALUES ('1', '2018-12-21 11:29:32', '天河', '10', '1');
INSERT INTO `test`.`Test2` (`bid`, `date`, `place`, `number`, `id`) VALUES ('3', '2018-12-21 11:29:32', '广州', '5', '4');
INSERT INTO `test`.`Test2` (`bid`, `date`, `place`, `number`, `id`) VALUES ('3', '2018-12-21 11:29:56', '北京', '2', '2');
INSERT INTO `test`.`Test2` (`bid`, `date`, `place`, `number`, `id`) VALUES ('5', '2018-12-04 11:30:12', '上海', '3', '3');

-- SELECT * FROM test2 WHERE place = '天河';
-- 6、以书价的10%作为销售收入计量各销售点的收入
-- %在数据库中是特殊字符

SELECT test2.place,SUM(test2.number*test1.price/10) '收入' FROM test2,test1 WHERE  bid = test1.book_id GROUP BY test2.place;

-- 7、统计作者的受欢迎程度,以销售量为依据

SELECT test1.anthor,concat(round((SUM(number)/c)*100,2),'%')  FROM 
(SELECT SUM(number) c FROM test2)b ,test1,test2 WHERE test1.book_id = test2.bid GROUP BY test1.anthor

 

-- 8、统计销售点的业绩(以销售量为依据)
SELECT test2.place,SUM(test2.number) FROM test2,test1 WHERE  bid = test1.book_id GROUP BY test2.place;

SELECT test1.anthor,concat(round((SUM(number)/c)*100,2),'%')  FROM 
(SELECT SUM(number) c FROM test2)b ,test1,test2 WHERE test1.book_id = test2.bid GROUP BY test1.anthor

-- 9、将所有书的价格上调10%
UPDATE test1 SET price = price*1.1 ;

-- 10.新书上市(将每种书再版后加入书库中,注意修改版本号)
UPDATE test1 SET version = version+1 ; -- wehere可加条件-- 11、将有再版并且不是最终版的书价下调20%,最终版本号最大为依据
-- 查询后更新产生死锁
-- UPDATE test1 SET price = price*0.8 WHERE version < (SELECT MAX(version) c FROM test1) 
-- [Err] 1093 - You can't specify target table 'test1' for update in FROM clause
-- 借助中间表,多做一次查询,避免查询更新出现死锁

UPDATE test1 SET price = price*0.8 WHERE version <(SELECT MAX(version) FROM (SELECT * FROM test1) as a);


-- 删除不再会被读者购买的书(再版过3次或三次以上的书中第一版被认为是不会再被读者购买)
-- SELECT * FROM test1 WHERE version >=3 ORDER BY book_id ASC LIMIT 0,1

DELETE FROM test1 WHERE book_id = (SELECT book_id FROM (SELECT * FROM test1 WHERE version >=3 ORDER BY book_id ASC LIMIT 0,1) as a)

猜你喜欢

转载自blog.csdn.net/qq_39766167/article/details/85164479