楼主: zwj1012
1172 9

[其他] sql嵌套条件查询语句出错,求解答;要计算每周平均或每7天平均出行天数,求解答 [推广有奖]

  • 0关注
  • 0粉丝

本科生

45%

还不是VIP/贵宾

-

威望
0
论坛币
330 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
907 点
帖子
52
精华
0
在线时间
103 小时
注册时间
2008-11-9
最后登录
2021-9-8

楼主
zwj1012 发表于 2020-4-24 16:05:22 |AI写论文
200论坛币
表名:test字段:ID、vin、time、mile、
表样例:
ID          Vin            time                         mile
1                a          2019-04-01 08:00:00            40
1            a          2019-04-01 08:00:00            40
2            a          2019-04-01 17:00:00            30
3            b          2019-04-02 09:00:00            50
4            b          2019-04-02 14:30:57            50
5            b          2019-04-03 07:10:10            50
6            c          2019-04-01 00:00:00            20
......



1、查询语句出错

因为表里出现重复数据条,所以要先去重;最终的目的是得出每个vin的每天平均mile。

time 的格式是年月日时分秒,例如,2019-04-01 00:00:00



select vin, avg(day_distance) as daily_distance from(

   select vin, date, sum(mile) as day_distance from(

      select vin, substr(time,1,10) as date, mile from (

          select distinct(id), vin, time, mile  from test where  time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00') a group by id ) b group by vin, date) c group by vin;


执行以上查询语句后,会出错,求助



2、还是这张表,需要得出每个vin的每周平均出行天数或者每七天平均出行天数,求助



最佳答案

鸦鸦林 查看完整内容

hadoop最接近SQL的 数据就是 Hive 了。 那就是一下 select vin,weekofyear(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out from (select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a group by vin,weekofyear(time)
关键词:sql 嵌套 查询语句

沙发
鸦鸦林 发表于 2020-4-24 16:05:23
zwj1012 发表于 2020-4-26 16:21
客户端用的是DBeaver,连接的数据库是Hadoop,是SQL语言啊
hadoop最接近SQL的 数据就是 Hive 了。 那就是一下


select vin,weekofyear(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out
from
(select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,weekofyear(time)

藤椅
鸦鸦林 发表于 2020-4-25 22:44:59
答案1:
select vin,substr(time,1,10) as time,avg(mile) as avg_mile from (select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,substr(time,1,10)

答案2(假设你是mysql,就用week function 区分周期 :
select vin,week(time) as weeks,count(time) as weekly_out_cnt, count(time)/7 as avg_weekly_out
from
(select distinct id,vin,time,mile from test where time BETWEEN '2019-04-01 00:00:00' AND '2019-06-31 00:00:00) a
group by vin,week(time)

板凳
zwj1012 发表于 2020-4-26 10:58:23
鸦鸦林 发表于 2020-4-25 22:44
答案1:
select vin,substr(time,1,10) as time,avg(mile) as avg_mile from (select distinct id,vin,tim ...
感谢你的回答。
第一个问题我已解决。

第二个问题,我这个应该不是mysql,没有week的命令,有点头大。。

报纸
鸦鸦林 发表于 2020-4-26 15:56:25
zwj1012 发表于 2020-4-26 10:58
感谢你的回答。
第一个问题我已解决。
是什么 language?

地板
zwj1012 发表于 2020-4-26 16:21:07
鸦鸦林 发表于 2020-4-26 15:56
是什么 language?
客户端用的是DBeaver,连接的数据库是Hadoop,是SQL语言啊

7
鸦鸦林 发表于 2020-4-26 20:39:24
zwj1012 发表于 2020-4-26 16:21
客户端用的是DBeaver,连接的数据库是Hadoop,是SQL语言啊
hadoop hive db 吗?

8
zwj1012 发表于 2020-4-27 10:11:55
鸦鸦林 发表于 2020-4-26 20:39
hadoop hive db 吗?
对,没有week函数呢

9
zwj1012 发表于 2020-4-27 13:32:21
鸦鸦林 发表于 2020-4-27 10:12
hadoop最接近SQL的 数据就是 Hive 了。 那就是一下
感谢提供思路,请教了

10
鸦鸦林 发表于 2020-4-27 16:58:56
谢谢你。我可以用来换书了

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
扫码
拉您进交流群
GMT+8, 2026-2-11 23:02