使用group by子句时,SQL查询无法正常工作

时间:2015-10-26 11:44:27

标签: mysql sql postgresql group-by

我在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

我该怎么办?

4 个答案:

答案 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)

从您的错误消息中可以看出这个问题,不是吗?

GROUP BY

中添加该列
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;