网易游戏笔试题:阅读以下SQL,理解SQL的语法含义,根据输入数据,编码输出该SQL的执行结果

匿名网友 匿名网友 发布于: 2015-10-12 00:00:00
阅读 225 收藏 0 点赞 0 评论 0

时间限制:5000ms
单点时限:1000ms
内存限制:256MB
描述:
作为一名游戏行业的数据分析师,每天都会面对大量的游戏数据,对游戏数据进行统计分析必不可少。有效地使用SQL进行数据统计,可以帮助你在工作中获得事半功倍的效果。

请阅读以下SQL,理解SQL的语法含义,根据输入数据,编码输出该SQL的执行结果。

SELECT
ctype,
COUNT(DISTINCT pid) AS pcnt,
SUM(cash) AS cash
FROM
(
SELECT
player_channel.pid AS pid,
player_channel.ctype AS ctype,
prepaid.cash AS cash
FROM
(
SELECT
players.pid AS pid,
IF(channels.ctype IS NULL, -1, channels.ctype) AS ctype
FROM
channels
RIGHT OUTER JOIN
players
ON
channels.cid=players.cid
) player_channel
LEFT OUTER JOIN
prepaid
ON
player_channel.pid=prepaid.pid
) channel_prepaid
GROUP BY
ctype
ORDER BY
cash DESC, ctype ASC
;
输入:
包含SQL语句中涉及的表数据,每个表的相关数据由以下内容组成:

第一行包含两个数据:tname(字符串类型,长度不超过10,保证为有效单词)和m(0<=m<=1000),用空格分隔。其中tname表示该表的名字,m表示该表有m行数据;

第二行为3个字符串(保证为有效单词,长度不超过10),用空格分隔,表示该表的字段名,每个表的字段顺序如下,

channels 表包含字段:cid,name,ctype,其中cid为主键

players 表包含字段:pid,name,cid,其中pid为主键

prepaids 表包含字段:id,pid,cash,其中id为主键

接下来m行,每行3个用空格分隔的数据,仅name字段的数据为字符串类型(长度不超过10,保证为有效单词),其他均为非负整型。

输出:
根据输入数据,输出SQL的执行结果。

样例输入
channels 3
cid name ctype
1 netease 0
2 iplay 0
3 appstore 1
players 7
pid name cid
1 Smith 1
2 Carter 2
3 Linda 2
4 Bush 3
5 Adam 4
6 Gates 5
7 Hill 1
prepaids 8
id pid cash
1 3 1000
2 4 3000
3 1 2000
4 6 1000
5 7 2000
6 2 2000
7 5 6000
8 3 2000
样例输出
0 4 9000
-1 2 7000
1 1 3000

评论列表