【问题标题】:Compare join count to another joined column将连接计数与另一个连接列进行比较
【发布时间】:2015-01-13 03:45:34
【问题描述】:

我试图在

中想出我认为应该是一个非常简单的查询

相关型号:

Schedulehas_manyEvents,和Eventhas_manyattendees我想获取所有attendees 少于eventschedulemin_attendees 列指定的events

SELECT "events".* FROM "events"
INNER JOIN "schedules" ON "schedules"."id" = "events"."schedule_id"
INNER JOIN "attendees" ON "attendees"."event_id" = "events"."id"
GROUP BY events.id
HAVING COUNT(attendees.id) < schedules.min_attendee

尝试上述查询时出现以下错误: ERROR: column "schedules.min_attendees" must appear in the GROUP BY clause or be used in an aggregate function

【问题讨论】:

  • 编辑您的问题并添加您的查询。
  • 完成!添加 Rails 生成的 SQL。

标签: sql ruby-on-rails group-by having


【解决方案1】:

您可以通过对其使用聚合函数来解决此问题:

SELECT "events".*
FROM "events" INNER JOIN
     "schedules"
      ON "schedules"."id" = "events"."schedule_id" INNER JOIN
      "attendees"
      ON "attendees"."event_id" = "events"."id"
GROUP BY events.id
HAVING COUNT(attendees.id) < MIN(schedules.min_attendee)

或者,将其包含在group by

SELECT "events".*
FROM "events" INNER JOIN
     "schedules"
      ON "schedules"."id" = "events"."schedule_id" INNER JOIN
      "attendees"
      ON "attendees"."event_id" = "events"."id"
GROUP BY events.id, schedules.min_attendee
HAVING COUNT(attendees.id) < schedules.min_attendee

【讨论】:

  • 这很简单。谢谢!
【解决方案2】:

如果您没有将聚合函数放在 schedules.min_attendee 附近,那么它应该出现在组中,否则不需要。

这可能对你有帮助

SELECT "events".* FROM "events"
INNER JOIN "schedules" ON "schedules"."id" = "events"."schedule_id"
INNER JOIN "attendees" ON "attendees"."event_id" = "events"."id"
GROUP BY events.id
HAVING COUNT(attendees.id) < MAX(schedules.min_attendee)

您可以使用 MAX 或 MIN,因为每一行都会有所不同。 无论您用于 SELECT 的列都必须在 GROUP BY 子句中,否则它会抛出错误(它必须出现在 group by 子句或 agg f'n 中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    • 2014-02-22
    • 2013-10-05
    相关资源
    最近更新 更多