朋友的朋友的SQL笔试题

题:以下是年,月份和数量的表格(sales),根据该表格完成以下问题

数据

一下解题都是基于MySQL来做的


1.在数据库中创建sales表并完成数据初始化,写出sql脚本

上图已经给出创建后的数据截图,下面给出脚本内容

CREATE TABLE `sales` (

  `year` int(11) DEFAULT NULL,

  `month` int(11) DEFAULT NULL,

  `amount` varchar(255) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ------------------------------ Records of sales-- ----------------------------

INSERT INTO `sales` VALUES ('2015', '1', '1.1');

INSERT INTO `sales` VALUES ('2015', '2', '1.2');

INSERT INTO `sales` VALUES ('2015', '3', '1.3');

INSERT INTO `sales` VALUES ('2015', '4', '1.4');

INSERT INTO `sales` VALUES ('2016', '1', '2.1');

INSERT INTO `sales` VALUES ('2016', '2', '2.2');

INSERT INTO `sales` VALUES ('2016', '3', '2.3');

INSERT INTO `sales` VALUES ('2016', '4', '2.4');


2.介绍存储过程的优点,并写出一个存储过程查询2015年的数据

1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。

2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。

3.减少网络流量,例如一个需要数百行的SQL代码的操作有一条执行语句完成,不需要在网络中发送数百行代码。

4.更好的安全机制,对于没有权限执行存储过程的用户,也可授权他们执行存储过程。

http://blog.csdn.net/jackmacro/article/details/5688687 可以看更多介绍

创建存储过程sp_sales

CREATE PROCEDURE sp_sales()

BEGIN

SELECT * FROM sales s WHERE s.`year`=2015;

END

调用存储过程sp_sales

CALL sp_sales


3.根据上面的表格,在数据库控制台打印以下结果,并给出相应的SQL脚本


cmd窗口查询结果

+------+------+------+------+------+

| year | 1    | 2    | 3    | 4    |

+------+------+------+------+------+

| 2015 | 1.1  | 1.2  | 1.3  | 1.4  |

| 2016 | 2.1  | 2.2  | 2.3  | 2.4  |

+------+------+------+------+------+

根据数据和图,基本可以判断是行转列查询。

SELECT s.`year`,

MAX(CASE s.`month` WHEN '1' THEN s.amount ELSE 0 END) '1',

MAX(CASE s.`month` WHEN '2' THEN s.amount ELSE 0 END) '2',

MAX(CASE s.`month` WHEN '3' THEN s.amount ELSE 0 END) '3',

MAX(CASE s.`month` WHEN '4' THEN s.amount ELSE 0 END) '4' FROM sales s GROUP BY s.`year`

你可能感兴趣的:(朋友的朋友的SQL笔试题)