我在sql
中编写了一个查询,其中包含group by
子句。
group by子句用于既不是主键也不是唯一键的属性,我在各个地方读过,当我们使用 mysql 时,它通常需要任意行,但是在< strong> postgreSql ,它的行为方式不同。 所以我在编写查询时使用了聚合函数。
我写的查询是:
select user_id, min(priority) from table where is_active = 'false' group by user_id;
此查询工作正常,但当我尝试获取有关任何其他属性的信息时,我收到错误。
新查询:
select id,user_id, min(priority) from table where is_processed='false' group by user_id;
,错误是:
column "table.id" must appear in the GROUP BY clause or be used in an aggregate function.
我错过了什么吗?
解释
根据答案的建议,我应该使用id或者我需要在group by子句之后选择的任何其他东西。
但它会改变概念的变化。
假设我有一个表“Pending_Entries”。它包含一些属性,如id,userd_id,is_active和priority。
现在,我需要找到与user_id and the minimum priority
对应的user_id
。为此,我使用了初始查询,它工作得非常好。现在假设我也需要id
。
我该怎么办?
答案 0 :(得分:1)
错误是正常的; MySQL不正确。在Postgres中,您可以使用window.onbeforeunload = function()
{
window.setTimeout(function () { window.location = 'homeURL'; }, 0);
window.onbeforeunload = null;
}
:
distinct on
在MySQL中,您的查询在语法上有效,但它没有按照您的意愿执行。它为不在select distinct on (user_id) t.*
from table t
where is_processed = 'false'
order by user_id, prioirty asc;
中而不在聚合函数中的列返回任意值。
有两种方法可以在两个系统中使用查询:
group by
答案 1 :(得分:0)
试试这个:
select id,user_id, min(priority) from table where is_processed='false' group by user_id, id, priority;
希望这有帮助。
答案 2 :(得分:0)
从您的错误消息中可以看出这个问题,不是吗?
中添加该列select id,user_id, min(priority) from table where is_processed='false' group by id,user_id,priority;
答案 3 :(得分:0)
在'group by'
之后添加列'id'select id,user_id, min(priority) from table where is_processed='false' group by user_id, id;