【sql小坑】在group by里用select字段的别名?
时间:2022-03-15 08:33
背景
-- 求每个用户的拥有的产品数,其中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 ];
- 单独作为子查询再去连主表。