sql - 无法在 GROUP BY 中使用列别名

标签 sql oracle group-by column-alias

我可以毫无问题地在 mysql 中运行它

SELECT 
    DATE_FORMAT(trans_date, '%Y-%m') month, 
    COUNTRY, COALESCE(COUNT(*), 0) trans_count,
    COALESCE(SUM(CASE WHEN state ='approved' THEN 1 END), 0) approved_count,
    COALESCE(SUM(amount), 0) trans_total_amount,
   COALESCE(SUM(CASE WHEN state ='approved' THEN amount END), 0) approved_total_amount
FROM 
    Transactions
GROUP BY 
    month, COUNTRY
ORDER BY 
    month;

但相同的查询无法在 Orcale 中运行,我无法使用聚合别名来使用 GROUP BY,并且在不使用 GROUP BY 的情况下无法聚合。

我可以通过子查询调用子查询或使用 CTE,但它太乏味了。

针对问题类型的良好查询是什么?

最佳答案

正如另一个答案中提到的,您不能在GROUP BY中添加别名,但可以在ORDER BY中添加别名。另外,DATE_FORMAT是MySql函数。在 Oracle 中是 TO_CHAR

因此您的最终查询应如下所示:

SELECT
    TO_CHAR(TRANS_DATE, 'YYYY-MM') AS MONTH,
    COUNTRY,
    COUNT(*) AS TRANS_COUNT,
    SUM(CASE WHEN STATE = 'approved'  THEN 1 ELSE 0 END) AS APPROVED_COUNT,
    SUM(AMOUNT) AS TRANS_TOTAL_AMOUNT,
    SUM(CASE WHEN STATE = 'approved' THEN AMOUNT ELSE 0 END) AS APPROVED_TOTAL_AMOUNT
FROM TRANSACTIONS
GROUP BY TO_CHAR(TRANS_DATE, 'YYYY-MM'), COUNTRY
ORDER BY MONTH;

关于sql - 无法在 GROUP BY 中使用列别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60941634/

相关文章:

SQL脚本生成SQL脚本

SQL SUBSTR错误: What is the correct syntax?

sql - 在 SNOWFLAKE SQL 中选择和聚合不同 id 的变量

mysql - 选择填充字段较多的记录

java - Oracle中什么列类型可以取全范围的java double值

MYSQL:使用 GROUP BY 增加行与行之间的值

sql - 针对具有重命名列的表的向后兼容 SQL 查询

具有 EMP_ID 和大量时间戳的 mySQL 表

Java JDBC 连接和 Oracle

linq - 与 NHibernate 和 Oracle 的按位与