在下面的查询中,我希望按照名字和姓氏的连接对所有订单进行分组,并按连接设置的结果进行排序。但是,BigQuery为查询返回以下错误:
SELECT
COUNT(o.ORDERID)
FROM EMPLOYEES e
INNER JOIN ORDERS o ON e.EMPLOYEEID = o.EMPLOYEEID
GROUP BY CONCAT(e.FIRSTNAME, ' ', e.LASTNAME)
ORDER BY CONCAT(e.FIRSTNAME, ' ', e.LASTNAME)ORDER子句表达式引用列column_name,该列既不分组也不聚合
我可以通过在ORDER BY中包装ANY_VALUE子句来修复这个问题。
SELECT
COUNT(o.ORDERID)
FROM EMPLOYEES e
INNER JOIN ORDERS o ON e.EMPLOYEEID = o.EMPLOYEEID
GROUP BY CONCAT(e.FIRSTNAME, ' ', e.LASTNAME)
ORDER BY ANY_VALUE(CONCAT(e.FIRSTNAME, ' ', e.LASTNAME))这是最好的做法吗?对于任意的GROUP BY表达式,是否有更规范的方法来做到这一点?其他DBMS,包括MySQL、SQLServer、Postgres等,处理第一个查询时没有出错。
发布于 2021-05-18 23:46:31
你可以只使用数字或引用。此外,您还可以在GROUP BY中使用SELECT键。我建议:
SELECT CONCAT(e.FIRSTNAME, ' ', e.LASTNAME) as fullname
COUNT(o.ORDERID)
FROM EMPLOYEES e INNER JOIN
ORDERS o
ON e.EMPLOYEEID = o.EMPLOYEEID
GROUP BY fullname
ORDER BY fullname;您还可以将最后两行写成:
GROUP BY 1
ORDER BY 1https://stackoverflow.com/questions/67595222
复制相似问题