[SQL]group by和order by是否能寫欄位別名
一、錯誤例項
--剔除汙染之後每一組人數不同
select
camp.group_id as group_id --實驗分組
,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1 as ob_week --觀察周
,count(distinct camp.driver_id) as group_cnt --組人數
,count(distinct arrive.order_id) as arrive_cnt --完單數
,sum(beatles_split) as beatles_split --分賬
,sum(gmv) as gmv --gmv
from
(
select
camp.driver_id as driver_id
,camp.group_id as group_id
,camp.extractor_name as extractor_name
,camp.user_ltv as user_ltv
,'2018-06-20' as start_date
from
(
select
distinct driver_id as driver_id
,group_id
,extractor_name
, '二期新手任務' as user_ltv
from beatles_strategy.mission_publiser_record_view_intern
where datetime='20180619'
and extractor_name='extractor_continuity_20180619'
and task_id in ('90','88','92')
)camp --活動分組資訊
left outer join
(
select
driver_id
from beatles_dwd.dwd_order_arrive_d_view_intern
where (is_test!=1 or is_test is null)
--and status in (2,3,4,5,6,13,31)
and concat_ws('-',year,month,day) between '2018-06-15' and '2018-06-20'
and (to_date(arrive_time)) between '2018-06-15' and '2018-06-20'
group by driver_id
)t --剔除非新手的車主
on camp.driver_id = t.driver_id
where camp.driver_id is not null and t.driver_id is null
)camp --剔除了非新手的活動分組資訊
left outer join
(
select
concat_ws('-',year,month,day) as arrive_dt --完單日期
,cast(driver_id as bigint) as driver_id
,cast(order_id as bigint) as order_id
from beatles_dwd.dwd_order_arrive_d_view_intern
where (is_test!=1 or is_test is null)
and concat_ws('-',year,month,day) between '2018-06-20' and '${end_date}'
group by cast(driver_id as bigint),cast(order_id as bigint),concat_ws('-',year,month,day)
)arrive --完單情況
on camp.driver_id=arrive.driver_id
left outer join
(
select
cast(relative_id as bigint) as order_id --訂單id
,sum(beatles_split) as beatles_split --單個訂單分賬
,max(total) as gmv --單個訂單gmv
from beatles_ods.payment_view_intern
where concat_ws('-',year,month,day) between '2018-06-20' and '${end_date}'
group by cast(relative_id as bigint)
)beatles_split
on arrive.order_id=beatles_split.order_id
group by group_id,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1
order by group_id,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1
這樣在hive下是解釋不通的,回顧一下SQL的執行順序https://blog.csdn.net/TOMOCAT/article/details/81586789。order by是在SQL的最後執行的,從而應該改成:
二、修改:
--剔除汙染之後每一組人數不同
select
camp.group_id as group_id --實驗分組
,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1 as ob_week --觀察周
,count(distinct camp.driver_id) as group_cnt --組人數
,count(distinct arrive.order_id) as arrive_cnt --完單數
,sum(beatles_split) as beatles_split --分賬
,sum(gmv) as gmv --gmv
from
--skip--
group by group_id,int((datediff(arrive.arrive_dt,'2018-06-20')-1)/7)+1
order by group_id,ob_week
相關文章
- 在SQL Server中修改欄位型別和欄位名稱的儲存過程SQLServer型別儲存過程
- mysql select欄位別名 不可以在select 或者where中使用 但是group by 與order by可以使用MySql
- sql語句修改欄位型別和增加欄位SQL型別
- SQL Server中獲取資料庫名、表名、欄位名和欄位註釋的SQL語句SQLServer資料庫
- mysql的order by和group byMySql
- SQL SERVER 查詢表的欄位名、資料型別和最大長度SQLServer資料型別
- [2020528]寫sql語句不要忘記給欄位加上表別名.txtSQL
- sqlite sql 修改欄位型別SQLite型別
- mybatis動態呼叫表名和欄位名MyBatis
- oracle 資料庫設定表和欄位的別名Oracle資料庫
- Django-ORM 之指定欄位別名DjangoORM
- pl/sql dev建表加欄位時建的欄位名都帶了“”SQLdev
- mysql order by 和 group by 順序問題MySql
- GORM 如何讀取別名欄位的值GoORM
- MySql Order By 多個欄位 排序規則MySql排序
- sqlserver查詢一個庫所有表的欄位名及欄位型別SQLServer型別
- 細說SQL SERVER中欄位型別SQLServer型別
- SQL 部分函式的使用,子查詢,group by,虛擬欄位,case……SQL函式
- 快排實現仿order by多欄位排序排序
- sql server 修改欄位名,檢視指定表是否存在SQLServer
- MySQL GROUP BY分組取欄位最大值MySql
- [備查]使用 SPQuery 查詢 "Person or Group" 欄位
- SQL新增表欄位SQL
- sql2005 獲取表欄位資訊和檢視欄位資訊SQL
- Oracle 修改欄位型別和長度Oracle型別
- sql小筆記(增刪改查——新增列、修改表名、列的欄位型別等)SQL筆記型別
- 更改MySql表和欄位區分大小寫MySql
- SQL Server 查詢表註釋和欄位SQLServer
- oracle檢視該使用者的所有表名字、表註釋、欄位名、欄位註釋、是否為空、欄位型別Oracle型別
- sql 統計多個欄位的和(如果欄位中含有 null 的處理)SQLNull
- MySQL資料庫中庫、表名、欄位的大小寫問題MySql資料庫
- SQL 重新命名錶、欄位、儲存過程名sp_renameSQL儲存過程
- 如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的欄位API
- mysql group_concat 實現把分組欄位寫成一行的方法MySql
- 保留兩位小數:資料庫欄位型別NUMBER,Java欄位型別Double型別資料庫型別Java
- MYSQL SET型別欄位的SQL操作知識介紹MySql型別
- 如何處理sql server中的image型別的欄位?SQLServer型別
- ASP獲取資料庫表名,欄位名以及對欄位的一些操作 (轉)資料庫