我正在寻找一种通过查询连接组内字段的字符串的方法.例如,我有一张桌子:
ID COMPANY_ID EMPLOYEE
1 1 Anna
2 1 Bill
3 2 Carol
4 2 Dave
Run Code Online (Sandbox Code Playgroud)
我想通过company_id分组得到类似的东西:
COMPANY_ID EMPLOYEE
1 Anna, Bill
2 Carol, Dave
Run Code Online (Sandbox Code Playgroud)
mySQL中有一个内置函数来执行这个group_concat
我一直在将一些MySQL查询迁移到PostgreSQL以使用Heroku.我的大多数查询工作正常,但当我使用group by时,我仍然遇到类似的重复错误:
错误:列"XYZ"必须出现在GROUP BY子句中或用于聚合函数
有人能告诉我我做错了什么吗?
MySQL 100%工作:
SELECT `availables`.*
FROM `availables`
INNER JOIN `rooms` ON `rooms`.id = `availables`.room_id
WHERE (rooms.hotel_id = 5056 AND availables.bookdate BETWEEN '2009-11-22' AND '2009-11-24')
GROUP BY availables.bookdate
ORDER BY availables.updated_at
Run Code Online (Sandbox Code Playgroud)
PostgreSQL错误:
ActiveRecord :: StatementInvalid:PGError:错误:列"availables.id"必须出现在GROUP BY子句中或用于聚合函数:
SELECT"availables".*FROM"availables"INNER JOIN"rooms"ON"rooms". id ="availables".room_id WHERE(rooms.hotel_id = 5056 AND availables.bookdate BETWEEN E'2009-10-21'EN'E'2009-10-23')GROUP BY availables.bookdate ORDER BY availables.updated_at
生成SQL的Ruby代码:
expiration = Available.find(:all,
:joins => [ :room ],
:conditions => [ "rooms.hotel_id = ? AND availables.bookdate BETWEEN ? AND ?", hostel_id, date.to_s, (date+days-1).to_s ], …Run Code Online (Sandbox Code Playgroud) 我继承了一些要清理的表,但首先,我试图加入所需的所有内容,但是遇到了问题,因为SpecialEvents通过表到达表的方法不止一种EventRegistrations。
在某些情况下EventRegistrations可以直接使用连接,event_registrations.scoreable_id而在另一些情况下则必须先连接另一个表SpecialPlaces,您可以知道需要通过event_registrations.scoreable_type哪种方式为SpecialEventor或SpecialPlace。
基本上,SpecialEvents如果我还必须SpecialPlaces先加入,该如何加入?例如,如果我尝试以SpecialEvents两种不同的方式加入,则会出现错误:“表名“ special_events”指定了多次。
SELECT event_registrations.id, array_agg(teams.name), event_registrations.number_of_players, event_registrations.state, event_registrations.created_at, array_agg(players.email), array_agg(special_events.name), array_agg(special_places.id)
FROM event_registrations
LEFT JOIN teams ON event_registrations.team_id = teams.id
LEFT JOIN team_memberships ON teams.id = team_memberships.team_id
LEFT JOIN players ON team_memberships.player_id = players.id
LEFT JOIN special_events ON event_registrations.scoreable_id = special_events.id AND event_registrations.scoreable_type = 'SpecialEvent'
LEFT JOIN special_places ON event_registrations.scoreable_id = special_places.id AND event_registrations.scoreable_type = 'SpecialPlace' …Run Code Online (Sandbox Code Playgroud) 我有2个表 - 课程包含课程的id和名称以及包含每门课程标签的tagCourse.
course tagcourse
------------ ----------------
PK id_course PK tag
name PK, FK id_course
Run Code Online (Sandbox Code Playgroud)
我想编写一个函数,通过给定的标签数组搜索课程,并按匹配标签的数量排序.但是我不知道如何以有效的方式正确地编写它.请帮我.
即.
CREATE OR REPLACE FUNCTION searchByTags(tags varchar[])
RETURNS SETOF.....
RETURN QUERY SELECT * FROM course c INNER JOIN tagcourse tc ON c.id_course = tc.id_course
WHERE ??? ORDER BY ???
END....
Run Code Online (Sandbox Code Playgroud) sql postgresql aggregate sql-order-by set-returning-functions
我的目标是生成一份报告,显示一周中某一天和/或一天中某个车库的平均占用率(y轴).我的数据模型如下:
has_many汽车和车库has_many预约,through: :carshas_many预约此外,车库有一个场地capacity (integer),这是适合车库的最大车辆数量.
如果我有一个跨越过去6个月的约会列表,我想生成一个线图,其中x轴显示一周中的每一天,分为4小时间隔,y轴显示在给定的日/小时间隔的6个月期间内,平均占用率(车库中的车辆数/容量),我该如何收集这些数据进行报告?
例如,汽车是In从一个约会的回归到下一个约会的提货,Out从约会的提货到returned_at时间.
从这些数据点建立连接到有意义地报告并将它们呈现给最终用户的最佳方式,我遇到了很多麻烦.
我使用的是Rails 4.1和Ruby 2.0.
编辑:SQL小提琴 - http://sqlfiddle.com/#!9/a72fe/1
在has_many关联上运行以下查询.建议has_many批准.
我正在运行rails 3和PostgreSQL:
Recommendation.joins(:approvals).where('approvals.count = ?
AND recommendations.user_id = ?', 1, current_user.id)
Run Code Online (Sandbox Code Playgroud)
这将返回以下错误:https://gist.github.com/1541569
postgresql ×6
sql ×5
activerecord ×2
aggregate ×1
count ×1
group-by ×1
heroku ×1
join ×1
left-join ×1
mysql ×1
ruby ×1
sql-order-by ×1