sql小坑在group by里用select字段的别名?
Posted everda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql小坑在group by里用select字段的别名?相关的知识,希望对你有一定的参考价值。
背景
-- 求每个用户的拥有的产品数,其中userid需要简单split出来
SELECT
split (id, ‘-‘) [ 0 ] AS userid,
count(DISTINCT productid) AS productid
FROM
user_product
WHERE
dt >= ‘2018-05-01‘
GROUP BY
userid
你是不是想这样用?
报错和原因
看看报错
Invalid table alias or column reference ‘userid‘: (possible column names are: id, productid)
什么意思,意思是where和group by是先执行,然后才有select,所以group by的只能是已from的表字段或计算的字段。
修改
如何修改,有很多方法,看方不方便:
- 先不count,外面再嵌套一层再count;
- 改为group by split (id, ‘-‘) [ 0 ];
- 单独作为子查询再去连主表。
以上是关于sql小坑在group by里用select字段的别名?的主要内容,如果未能解决你的问题,请参考以下文章
SQL sum()后许多字段要group by不使用group by, 改用left join select 需要的字段。哪个方法好?速度快?