sql
  • postgresql
  • group-by
  • 2016-09-22 126 views 0 likes 
    0

    当我运行此查询列“ic.inscount”必须出现在GROUP BY子句或聚合函数中使用

    WITH install_count_join_date AS (
        SELECT 
        date_trunc('month', join_date) AS date, 
        COUNT(*) AS "inscountjoin" 
        FROM 
        apps202_prod.search 
        WHERE 
        join_date >= '2016-06-01' 
        AND 
        app_id = 3 
        GROUP BY 
        date_trunc('month', join_date) 
    ), install_count AS (
        SELECT 
        DATE(original_timestamp) AS date, 
        COUNT(*) AS "inscount" 
        FROM 
        apps202_prod.search 
        WHERE 
        original_timestamp >= '2016-06-01' 
        AND 
        app_id = 3 
        GROUP BY 
        DATE(original_timestamp) 
    ) 
    
    SELECT 
        date_trunc('month', mr.date) AS "money_revenue_date", 
        SUM(mr.amount) AS "amt", 
        ic.inscount AS "install_count" 
    FROM 
        mysql_apps202_prod.apps202_prod_money_revenue mr 
        join install_count ic on date_trunc('month', ic.date) = date_trunc('month', mr.date) 
    WHERE 
        date_trunc('month', mr.date) >= '2016-06-01' 
    AND 
        mr.app_id = 3 
    
    GROUP BY 
        date_trunc('month', mr.date) 
    

    我得到这个错误:

    column ic.inscount must appear in the GROUP BY clause or be used in an aggregate function

    +1

    该错误是相当自我解释...因为你的最终查询使用聚合('sum'),您需要将其他字段添加到'组by'子句... – sgeddes

    +0

    我不需要为该组添加子帐号,因为我已经在with子句中汇总了它,因为您在上面的代码中看到它 –

    +0

    您正在汇总外部查询中的“amount”列。所以是的,你必须再次使用'group by'(对于这两个字段)... – sgeddes

    回答

    0

    你必须改变你的select语句如下,因为你有很多关于你正在处理的问题的反馈,如果你正在使用group,那么你选择除了group by之外的所有具有聚合函数的列。在你的情况ic.inscount既不分组也不使用任何聚合函数,所以请根据您的要求使用下面的一个。

    SELECT 
        date_trunc('month', mr.date) AS "money_revenue_date", 
        SUM(mr.amount) AS "amt", 
        ic.inscount AS "install_count" 
    FROM mysql_apps202_prod.apps202_prod_money_revenue mr 
    join install_count_join_date ic on date_trunc('month', ic.date) = date_trunc('month', mr.date) 
    WHERE date_trunc('month', mr.date) >= '2016-06-01' 
        AND mr.app_id = 3 
    GROUP BY date_trunc('month', mr.date), ic.inscount 
    

    OR

    SELECT 
        date_trunc('month', mr.date) AS "money_revenue_date", 
        SUM(mr.amount) AS "amt", 
        MAX(ic.inscount) AS "install_count" --Any Addregate Function 
    FROM mysql_apps202_prod.apps202_prod_money_revenue mr 
    join install_count_join_date ic on date_trunc('month', ic.date) = date_trunc('month', mr.date) 
    WHERE date_trunc('month', mr.date) >= '2016-06-01' 
        AND mr.app_id = 3 
    GROUP BY date_trunc('month', mr.date) 
    
    +0

    有一个错误“关系”install_count“不存在” –

    +0

    你错过了CTE在查询中使用,所以让我解决这个问题,如果我没有错,你想使用CTE全名'install_count_join_date'而不是'INSTALL_COUNT'。尝试使用上面的更新代码 – Susang

    相关问题