我在使用函数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
答案 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 KEY
(CREATE 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