表名:tx_friends 字段:num_cnt 好友数量;day 日期;rtime 时间戳;country 国家;os 手机系统;uid 用户id 1. 按上面的上报定义,编写hive做一个好友中位数及平均数的报表。 一个用户 一天切N次好友列表时 会上报 n个同样的日期,n个不同的时间戳,n个同样的id
时间: 2024-02-23 19:00:39 浏览: 132
可以使用以下Hive SQL语句进行好友中位数和平均数的报表计算:
```
SELECT
day,
country,
os,
AVG(num_cnt) AS avg_num_cnt,
percentile_cont(0.5) WITHIN GROUP (ORDER BY num_cnt) AS median_num_cnt
FROM
tx_friends
GROUP BY
day,
country,
os;
```
这个查询将按天、国家和操作系统对好友数量进行分组,并计算平均值和中位数。其中,`percentile_cont(0.5) WITHIN GROUP (ORDER BY num_cnt)`表示按num_cnt字段升序排序后的中位数。
相关问题
表名:tx_friends 字段:num_cnt 好友数量;day 日期;rtime 时间戳;country 国家;os 手机系统;uid 用户id 1. 按上面的上报定义,编写hive sql 做一个好友中位数及平均数的报表。 一个用户 一天切N次好友列表时 会上报 n个同样的日期,n个不同的时间戳,n个同样的id
好的,以下是查询语句:
```
SELECT
day,
country,
os,
PERCENTILE(num_cnt, 0.5) as median_friends,
AVG(num_cnt) as avg_friends
FROM
tx_friends
GROUP BY
day,
country,
os;
```
这个查询语句会按照日期、国家和手机系统分组,然后计算每组的好友数量的中位数和平均数。注意到同一个用户一天内可能会上报多次,但是我们只需要统计一次,因此在这个查询中,我们没有使用uid字段。
数据库clickhouse中有这样一个表,表名为market_item_prop_day_record,其中有字段prop_name_id,prop_value_id,sale_cnt,sale_amt,现在有这样一个需求:求每个prop_name_id下的top30 prop_value_id 对应的sale_cnt和
可以使用如下SQL语句实现:
```
SELECT prop_name_id, prop_value_id, sale_cnt
FROM market_item_prop_day_record
WHERE (prop_name_id, sale_cnt) IN (
SELECT prop_name_id, sale_cnt
FROM (
SELECT prop_name_id, prop_value_id, SUM(sale_cnt) AS sale_cnt
FROM market_item_prop_day_record
GROUP BY prop_name_id, prop_value_id
) t
WHERE t.prop_name_id = market_item_prop_day_record.prop_name_id
ORDER BY sale_cnt DESC
LIMIT 30
)
ORDER BY prop_name_id, sale_cnt DESC
```
该SQL语句会先计算每个prop_name_id和prop_value_id对应的总销售量,然后对于每个prop_name_id,取销售量前30的prop_value_id及对应的销售量。最后按照prop_name_id和销售量排序输出结果。
阅读全文