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的表字段或计算的字段。

修改

如何修改,有很多方法,看方不方便:

  1. 先不count,外面再嵌套一层再count;
  2. 改为group by split (id, ‘-‘) [ 0 ];
  3. 单独作为子查询再去连主表。

以上是关于sql小坑在group by里用select字段的别名?的主要内容,如果未能解决你的问题,请参考以下文章

SQL中group by语句有何作用?

SQL GROUP BY对多个字段进行分组

sql语句中 group by用法

SQL sum()后许多字段要group by不使用group by, 改用left join select 需要的字段。哪个方法好?速度快?

不是group by 表达式

sql语句中的group by要怎么用!!