[SQL]511+512+534+550+569
511. 游戏玩法分析 I

solution
SELECT player_id, MIN(event_date) AS first_login
FROM Activity
GROUP BY player_id;
512. 游戏玩法分析 II

SELECT player_id, device_id
FROM Activity
WHERE (player_id, event_date) IN (SELECT player_id, MIN(event_date)
FROM Activity
GROUP BY player_id);
HAVING不行的原因
having子句执行在select 之后, 因此having中的字段必须在select子句中, event_date没有再select子句里,所以不行
534. 游戏玩法分析 III

SELECT a1.player_id, a1.event_date, SUM(a2.games_played) AS games_played_so_far
FROM Activity a1, Activity a2
WHERE a1.player_id = a2.player_id
AND a1.event_date >= a2.event_date
GROUP BY a1.player_id, a1.event_date --这一定要有a1.event_date,否则Result会根据player_id自动合并
ORDER BY a1.player_id, a1.event_date;
另一种方法:
SELECT player_id, event_date,
CASE WHEN @prev = player_id THEN @cnt := @cnt + games_played
WHEN @prev := player_id THEN @cnt := games_played
END 'games_played_so_far'
FROM (SELECT player_id, event_date, games_played
FROM activity
ORDER BY player_id, event_date) a,
(SELECT @cnt := 0, @prev := null) t;
550. 游戏玩法分析 IV

方法一
SELECT ROUND(COUNT(DISTINCT player_id)/(SELECT COUNT(DISTINCT player_id)
FROM Activity), 2) AS fraction
FROM Activity
WHERE (player_id, event_date) IN(SELECT player_id, DATE(MIN(event_date)+1)
FROM Activity
GROUP BY player_id);
方法二
SELECT ROUND(SUM(CASE WHEN DATEDIFF(a.event_date, b.first_date)=1 THEN 1 ELSE 0 END) / (SELECT COUNT(DISTINCT player_id)
FROM Activity), 2) AS fraction
FROM Activity a, --千万不要漏掉这个逗号!!
(SELECT player_id, MIN(event_date) AS first_date
FROM Activity
GROUP BY player_id) b
WHERE a.player_id = b.player_id;
569. 员工薪水中位数


SELECT b.id,b.company,b.salary
-- 3. 连接结果
FROM (
-- 1. 按 company 分组排序,记为 `rk`
SELECT id,company,salary,
CASE @com WHEN company THEN @rk:=@rk+1 ELSE @rk:=1 END rk,
@com:=company
FROM employee,(SELECT @rk:=0, @com:='') a
ORDER BY company,salary) b
LEFT JOIN
(-- 2. 计算各 company 的记录数除以2,记为 `cnt`
SELECT company,COUNT(1)/2 cnt FROM employee GROUP BY company) c
ON b.company=c.company
-- 4. 找出符合中位数要求的记录
WHERE b.rk in (cnt+0.5,cnt+1,cnt);
[SQL]511+512+534+550+569的更多相关文章
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
- Sql语句知识大全
1.经典SQL语句大全(绝对的经典) 2. 3. 4.一.基础 1.1.说明:创建数据库 2.CREATE DATABASE database-name 3.2.说明:删除数据库 4.drop dat ...
- SQL 删除外键列
一 SQL删除列的语句是: alter table tableName drop column columnName --(其中,tableName为表名,columnName为列名) 但是,如果某列 ...
- SQL存储过程将符合条件的大量记录批量删除脚本
-- ============================================= -- Author: James Fu -- Create date: 2015/10/27 -- D ...
- Linux命令学习总结:dos2unix - unix2dos
命令简介: dos2unix是将Windows格式文件转换为Unix.Linux格式的实用命令.Windows格式文件的换行符为\r\n ,而Unix&Linux文件的换行符为\n. dos2 ...
- 【转】T-SQL 教程
USE [test] GO /****** Object: StoredProcedure [dbo].[PageIndex] Script Date: 12/07/2011 10:26:36 *** ...
- oracle中的exists 和not exists 用法详解(转)
有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; ...
- OSChina 其中很重要的一类——RequestContext
RequestContext 这个类在 OSChina 中是很重要的一个类.该类由全局 Filter 进行初始化.并传递给包含 Action 和 页面中直接使用.使用时通过 RequestContex ...
- memcached使用文档
使用memcached进行内存缓存 通常的网页缓存方式有动态缓存和静态缓存等几种,在ASP.NET中已经可以实现对页面局部进行缓 存,而使用memcached的缓存比ASP.NET的局部缓存更加灵活, ...
随机推荐
- Bugku的一道注入
继续补sqli的题 这道题与之前的题的区别是在第二部分中加了一道waf,所以需要特殊的手段来进行注入. 题目来源:http://123.206.87.240:9004/1ndex.php?id=1 第 ...
- 11--PHP中的类和对象
PHP类和对象 类是面向对象程序设计的基本概念,通俗的理解类就是对现实中某一个种类的东西的抽象, 比如汽车可以抽象为一个类,汽车拥有名字.轮胎.速度.重量等属性,可以有换挡.前进.后退等操作方法. 通 ...
- C++扬帆远航——15(项目二,太乐了)
/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:tailezhanshi.cpp * 作者:常轩 * 微信公众号 ...
- linux tc流量控制
tc流量控制 项目背景 vintage3.0接口lookupforupdage增加一个策略,当带宽流量tx或rx超过40%,75%随机返回304:超过60%,此接口均返回304 为了对测试机器进行流量 ...
- ubuntu 18.04门等字不正常
sudo vim /etc/fonts/conf.d/64-language-selector-prefer.conf 该文件配置了 Noto Sans CJK 的优先级.i进入编辑后,可以看到,JP ...
- App崩溃监控
常见马虎导致崩溃 1 数组越界: 2 多线程问题,在子线程刷新UI: 3 主线程无响应,主线程超过系统规定的时间没有响应,就会被watchdog杀掉: 4 野指针: 崩溃信息的收集却并没有那么简单.因 ...
- JS面试准备二
1.常用的字符串方法 1. indexOf:查找字符串某一项的初始位置2. slice:截取字符串(包含起始位置,不包含结束位置) 不会根据参数大小,交换参数位置 如果出现-1按倒数第一个数,如果出现 ...
- Windows安装python包出现PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问的问题解决方案
在python中安装sqlalchemy时,总是提示(当安装依赖有vs的python包时,可能会出现以下错误:) PermissionError: [WinError 32] 另一个程序正在使用此文件 ...
- js之重写原型对象
“实例中的指针仅指向原型,而不是指向构造函数”. “重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系:它们引用的仍然是最初的原型”.——前记 var fun = function(){ ...
- 关于“关键字synchronized不能被继承”的一点理解
网上看到很多对关键字synchronized继承性的描述只有一句"关键字synchronized不能被继承",并没有描述具体场景,于是自己做了以下测试. //父类 public c ...