【发布时间】:2012-11-17 14:31:29
【问题描述】:
我最好先查询下面列出的查询,然后按stories.id 分组,但我收到以下错误:
ERROR: column "u.first_name" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT "s".*, "u"."first_name", "u"."last_name", ("i"."filen...
第二个查询有效,但没有按stories.id 分组,并生成错误的结果。是否可以从多个表中选择而不是全部分组?
表panels 也有一个列updated_at。我想根据panels.updated_at 获取每个故事的最新file。
SELECT
"s".*,
"u"."first_name",
"u"."last_name",
("i"."filename" || '.' || "i"."extension") AS "file"
FROM
"stories" "s"
LEFT JOIN "panels" "p" ON("p"."story_id" = "s"."id")
LEFT JOIN "users" "u" ON("s"."user_id" = "u"."uid")
LEFT JOIN "images" "i" ON ("p"."image_id" = "i"."id")
WHERE
"s"."complete" = false AND
"s"."created_by" = 205700489
GROUP BY
"s"."id",
ORDER BY
"s"."created_at" DESC
SELECT
"s".*,
"u"."first_name",
"u"."last_name",
("i"."filename" || '.' || "i"."extension") AS "file"
FROM
"stories" "s"
LEFT JOIN "panels" "p" ON("p"."story_id" = "s"."id")
LEFT JOIN "users" "u" ON("s"."user_id" = "u"."uid")
LEFT JOIN "images" "i" ON ("p"."image_id" = "i"."id")
WHERE
"s"."complete" = false AND
"s"."created_by" = 205700489
GROUP BY
"s"."id",
"u"."first_name",
"u"."last_name", "i"."filename",
"i"."extension"
ORDER BY
"s"."created_at" DESC
【问题讨论】:
-
第二次查询的结果怎么错了?
-
@Igor Romanchenko 它不按故事 ID 分组
-
您的问题没有定论。如果您想按
story.id分组,您必须定义要从多行中选择的内容。
标签: sql postgresql greatest-n-per-group postgresql-9.1 rails-postgresql