# 1. 案例一：求数学成绩比语文成绩好的学生的ID

## (1) 需求分析

```hive> select * from score;
1   1   yuwen   43
2   1   shuxue  55
3   2   yuwen   77
4   2   shuxue  88
5   3   yuwen   98
6   3   shuxue  65```

## (2) 方法一(join)

```SELECT s1.sid FROM score s1 INNER JOIN score s2
ON s1.sid = s2.sid
AND s1.score > s2.score
AND s1.subject = 'shuxue'
AND s2.subject = 'yuwen';

# 结果
1
2```

## (3) 方法二(行列转换)

```--(1)
CREATE TABLE t1 AS
SELECT sid,
CASE subject WHEN 'yuwen' THEN score END AS yuwen,
CASE subject WHEN 'shuxue' THEN score END AS shuxue
FROM score;

t1中的数据:
1   43      NULL
1   NULL    55
2   77      NULL
2   NULL    88
3   98      NULL
3   NULL    65

--(2)
CREATE TABLE t2 AS
SELECT sid, max(yuwen) yuwen, max(shuxue) shuxue
FROM t1
GROUP BY sid;

t2中的数据:
1   43  55
2   77  88
3   98  65

--(3)
SELECT sid FROM t2 WHERE shuxue > yuwen;

1
2```

# 2.案例二：销售表的行列转换

## (1) 需求

```hive> select * from sales;
sales.y sales.season    sales.sale
1991        1               11
1991        2               12
1991        3               13
1991        4               14
1992        1               21
1992        2               22
1992        3               23
1992        4               24```

## (2)实现

```SELECT
tmp.y,
max(tmp.season1) season1,
max(tmp.season2) season2,
max(tmp.season3) season3,
max(tmp.season4) season4
FROM (SELECT y,
CASE season WHEN 1 THEN sale END AS season1,
CASE season WHEN 2 THEN sale END AS season2,
CASE season WHEN 3 THEN sale END AS season3,
CASE season WHEN 4 THEN sale END AS season4
FROM sales) tmp
GROUP BY tmp.y;

tmp.y   season1 season2 season3 season4
1991    11      12      13      14
1992    21      22      23      24```

# 3. 案例三：学生成绩表的列转行

## (1) 需求

```id  sname   math    computer    english
1   Jed     34      58          58
2   Tony    45      87          45
3   Tom     76      34          89```

```id  sname   course      score
1   Jed     computer    58
1   Jed     english     58
1   Jed     math        34
2   Tony    computer    87
2   Tony    english     45
2   Tony    math        45
3   Tom     computer    34
3   Tom     english     89
3   Tom     math        76```

## (2) 实现

```select id, sname, 'math' as course, math as score from score
union
select id, sname, 'computer' as course, computer as score from score
union
select id, sname, 'english' as course, english as score from score
order by id, sname, course;```

0 条评论

• ### HBase Region 自动拆分策略

其中BusyRegionSplitPolicy是HBase-2.x新增的策略，其他6种在HBase-1.2.x中也可以使用。

• ### Spark-RDD持久化

使用不同参数的组合构造的实例被预先定义为一些值，比如MEMORY_ONLY代表着不存入磁盘，存入内存，不使用堆外内存，不进行序列化，副本数为1，使用persis...

• ### Kafka 消费者旧版低级 API

Kafka 消费者总共有 3 种 API，新版 API、旧版高级 API、旧版低级 API，新版 API 是在 kafka 0.9 版本后增加的，推荐使用新版 ...

• ### Day10面向对象高级编程1/3

使用slots 正常情况下，当我们定义了一个class，创建了一个class的实例后，我们可以给该实例绑定任何属性和方法，这就是动态语言的灵活性。 class...

• ### Elasticsearch：使用 function_score 及 soft_score 定制搜索结果的分数

我们将介绍使用 function_score 的基础知识，并介绍一些 function core 技术非常有用和有效的用例。

• ### 使用@property

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a0...

• ### 如何用 Python 将 Excel 表格转成可视化图形？

大家知道，考研很大一部分也是考信息收集能力。每年往往有很多人就是在这上面栽跟头了，不能正确分析各大院校往年的录取信息，进而没能选择合适的报考院校。

• ### python 面向对象技巧 @property

在绑定属性时，如果我们直接把属性暴露出去，虽然写起来很简单，但是，没办法检查参数，导致可以把成绩随便改：

• ### “猜你喜欢”的背后揭秘——我偷偷知道你喜欢什么哟

话说，最近的瓜实在有点多，从我科校友李雨桐怒锤某男、陈羽凡吸毒被捕、蒋劲夫家暴的三连瓜，到不知知网翟博士，再到邓紫棋解约蜂鸟、王思聪花千芳隔空互怼。