我有一张table id
, name
以及 score
我正在努力抽取得分最高的用户。每个用户可能有多个条目,因此我希望将分数相加,按用户分组。
我已经调查过了 JOIN
操作,但它们似乎是在有两个单独的表时使用的,而不是一个表的两个“视图”。
问题是如果 id
字段存在,用户将没有 name
,反之亦然。
在以下链接中可以找到一个最小的示例:http://sqlfiddle.com/#!2011年9月29日
基本上,我有以下数据:
id name score
--- ----- ------
1 '' 15
4 '' 20
NULL 'paul' 8
NULL 'paul' 11
1 '' 13
4 '' 17
NULL 'simon' 9
NULL 'simon' 12
最后我想说的是:
id/name score
-------- ------
4 37
1 28
'simon' 21
'paul' 19
我可以分组 id
很容易,但它将空值视为单个字段,而实际上它们是两个独立的用户。 SELECT id, SUM(score) AS total FROM posts GROUP BY id ORDER by total DESC;
```
id score
NULL 40
4 37
1 28
提前谢谢。
更新
此查询的目标环境位于配置单元中。下面是查询和输出,只查看 `id` 字段:
hive> SELECT SUM(score) as total, id FROM posts WHERE id is not NULL GROUP BY id ORDER BY total DESC LIMIT 10;
...
OK
29735 87234
20619 9951
20030 4883
19314 6068
17386 89904
13633 51816
13563 49153
13386 95592
12624 63051
12530 39677
运行下面的查询会得到完全相同的输出:
hive> select coalesce(id, name) as idname, sum(score) as total from posts group by coalesce(id, name) order by total desc limit 10;
使用新的计算列名运行以下查询 `idname` 给出一个错误:
hive> select coalesce(id, name) as idname, sum(score) as total from posts group by idname order by total desc limit 10;
FAILED: SemanticException [Error 10004]: Line 1:83 Invalid table alias or column reference 'idname': (possible column names are: score, id, name)
3条答案
按热度按时间quhf5bfb1#
kcrjzv8t2#
你的
id
看起来是数字。在某些数据库中,使用coalesce()
一个数字和一个字符串可能是一个问题。在任何情况下,我都建议对类型进行明确说明:qvtsj1bj3#
您可以使用合并来获取任一列的非空值: