GROUP BY的Python和PostgreSQL问题

时间:2019-03-13 18:27:24

标签: python sql postgresql psycopg2

我在使用函数view()时遇到了一些问题。我收到错误消息:

  

列“ store.id”必须出现在GROUP BY子句中或在汇总函数中使用

例如:

name    number       quantity
plc        55              1
engine     66              1
plc        55              3

输出:

name    number       quantity
plc        55              4
engine     66              1

3 个答案:

答案 0 :(得分:2)

我想您正在寻找这样的东西:

SELECT
  name,
  producent,
  model,
  number,
  SUM(quantity),
  warehouse,
  location
FROM store
WHERE
  quantity > 0
GROUP BY
  name,
  producent,
  model,
  number,
  warehouse,
  location
ORDER BY
  number;

我已从所选字段中删除了id,因为您早先已经在UNIQUE语句中声明为PRIMARY KEYCREATE TABLE)字段(因为它是自动递增的)按照您声明的顺序)。您永远都不想在UNIQUE字段上分组-它只会为您提供与没有字段相同的结果。

但是为了确定,我们需要知道您希望输出的样子。

在将结果与SQL分组时,这里的经验法则是:始终在GROUP BY子句中包含在聚合函数之外选择的所有字段。

更新

您已经编辑了问题,因此包含的原始查询已消失。但是看起来您已经包括了想要的结果。这是您将获得那些的方法:

SELECT
  name,
  number,
  SUM(quantity) as "quantity"
FROM store
WHERE
  quantity > 0
GROUP BY
  name,
  number
ORDER BY
  number;

希望您能接受这样的答案。

答案 1 :(得分:0)

按如下所示更改查询

    Button btnSearch = (Button) view.findViewById(R.id.btnFragment1);
btnSearch.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnFragment1:
                FragmentHome home = new FragmentHome();  //this is your new fragment.
                FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                ft.replace(R.id.activity_main_content_fragment, home);
                ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);// it will anim while calling fragment.
                ft.addToBackStack(null); // it will manage back stack of fragments.
                ft.commit();
                break;
        }
    }
});

您还必须将未聚合的所选列也放入SELECT name, number, SUM(quantity) FROM store WHERE quantity>0 GROUP BY name, number ORDER BY number

答案 2 :(得分:0)

默认情况下,select的列应在group by子句中使用。 如上所述,您还可以按组将select中的所有列包括在内。 我还看到了一种替代方法,其中可以使用sub query来避免在group by中包括所有列。 请参考此链接- previous answer for related issue