PostgreSQL按错误分组

时间:2018-08-28 10:31:06

标签: postgresql group-by

我在一个名为“ processed_data”的PostgreSQL数据库中具有以下架构:

日期->日期类型,shop_id->整数类型,item_category_id->整数类型,sum_item_cnt_day->实型。

显示关系的前5行如下:

date  |  shop_id  |  item_category_id  |  sum_item_cnt_day

------+-----------+--------------------+------------------

2014-12-29  |  49  |  3  |  4

2014-12-29  |  49  |  6  |  1

2014-12-29  |  49  |  7  |  1

2014-12-29  |  49  |  12  |  3

2014-12-29  |  49  |  16  |  1

现在,“ shop_id”有60个唯一的商店,范围从0-59,其中每个商店都出售一些商品,这些商品被分组到一个新列“ item_category_id”中,其中“ sum_item_cnt_day”表示商店出售的商品数量,它是item_category_id。 / p>

我现在正试图通过尝试将以下列作为最终结果来进一步汇总数据-

日期,shop_id,sum_item_cnt_day

因此,数据是根据每个商店在“ item_category_id”中出售的所有商品的数量(用“ shop_id”表示)汇总并计算“ sum_item_cnt_day”的总和。

当我尝试执行以下SQL命令时-

select date, shop_id, sum(sum_item_cnt_day) from processed_data group by shop_id;

显示错误-

错误:列“ processed_data.date”必须出现在GROUP BY子句中或在聚合函数中使用 第1行:从已处理的日期中选择日期,shop_id,总和(sum_item_cnt_day)...                ^

甚至以下SQL命令-

select date, shop_id, sum(sum_item_cnt_day) from processed_data where date between '2013-01-01' and '2013-01-31' group by shop_id;

给出错误-

错误:列“ processed_data.date”必须出现在GROUP BY子句中或在聚合函数中使用 第1行:从已处理的日期中选择日期,shop_id,总和(sum_item_cnt_day)...                ^

关于出了什么问题以及我错过了什么的任何建议?

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您想要的最简单的解决方法是将GROUP BY添加到SELECT date, shop_id, SUM(sum_item_cnt_day) FROM processed_data GROUP BY date, shop_id; 子句中:

int solvemaze(int horizontal, int vertical, int cote)
    {


        if ((horizontal == taille - 1) && (vertical == taille - 1))
        {
            solution[vertical, horizontal] = 1;
            return 1;
        }

        if (horizontal >= 0 && vertical >= 0 && horizontal < taille && vertical < taille && solution[vertical, horizontal] == 0)
        {

            printsolution();
            //if safe to visit then visit the cell
            solution[vertical, horizontal] = 1;

            for (int i = 0; i < 3; i++)
            {

                if (mazeTab[horizontal, vertical, cote] == 0)
                {
                    if (cote == 0 && solvemaze(horizontal, vertical + 1, (cote + 3) % 4) == 1)
                    {
                        return 1;
                    }
                    else if (cote == 1 && solvemaze(horizontal + 1, vertical, (cote + 3) % 4) == 1)
                    {
                        return 1;

                    }
                    else if (cote == 2 && solvemaze(horizontal, vertical - 1, (cote + 3) % 4) == 1)
                    {
                        return 1;

                    }
                    else if (cote == 3 && solvemaze(horizontal - 1, vertical, (cote + 3) % 4) == 1)
                    {
                        return 1;

                    }
                }
                cote = (cote + 1) % 4;

            }

            //backtracking
            solution[vertical, horizontal] = 0;

            return 0;
        }
        return 0;

    }

如果您真的不希望每天为每家商店取款,而是想为整个 天中的每家商店取款,那么您将不得不考虑要在多个日期中的哪个日期显示。