Mysql 体外长生不老药:预加载关联中的总和值

Mysql 体外长生不老药:预加载关联中的总和值,mysql,postgresql,elixir,phoenix-framework,ecto,Mysql,Postgresql,Elixir,Phoenix Framework,Ecto,我有一个数据库,其中有不同的歌曲,可以有多个请求,每个请求可以部分有多个投票 我试图建立一个查询,获取请求的所有信息(歌曲信息和用户投票),但我只想选择我需要的重要信息 我现在有这样的设置 def get_requests_in_zone(zone_id, max_played) do query = from request in Request, left_join: song in assoc(request, :song), where: request.zone_id == ^

我有一个数据库,其中有不同的歌曲,可以有多个请求,每个请求可以部分有多个投票

我试图建立一个查询,获取请求的所有信息(歌曲信息和用户投票),但我只想选择我需要的重要信息

我现在有这样的设置

def get_requests_in_zone(zone_id, max_played) do
query = from request in Request,
  left_join: song in assoc(request, :song),
  where: request.zone_id == ^zone_id and request.times_played <= ^max_played,
  select: request,
  preload: [song: song],
  order_by:  [asc: request.times_played, desc: request.inserted_at]
Repo.all(query)
 end

def  calculate_rating(request_id)do
query = from votes in Vote,
  where: votes.request_id == ^request_id,
  select: sum(votes.rating)

Repo.one(query)
end

def get_requests_in_zone_with_votes(zone_id,max_played) do
Enum.map(get_requests_in_zone(zone_id,max_played),
  fn(x) ->
    %{title: x.song.title, url: x.song.url, thumbnail: x.song.thumbnail, rating: calculate_rating(x.id)} end)
end
它只是说 错误42803(分组错误):列“s0.id”必须出现在GROUP BY子句中,或在聚合函数中使用

我如何构建一个查询来检索请求并返回一个类似于get_requests_in_zone_中使用的结构(带有投票)的结构


谢谢你抽出时间

计算子查询中的和,并从主查询连接到它:

q1 = from votes in Vote,
     group_by: votes.request_id,
     select: %{request_id: votes.request_id, total_rating: sum(votes.rating)}

q2 = from request in Request,
     left_join: song in assoc(request, :song),
     left_join: rating in subquery(q2), on: request.id == rating.request_id,
     where: request.zone_id == ^zone_id and request.times_played <= ^max_played,
     select: %{title: song.title, url: song.url, thumbnail: song.thumbnail, rating: rating.total_rating},
     order_by:  [asc: request.times_played, desc: request.inserted_at]
q1=来自投票中的投票,
分组人:vows.request\u id,
选择:%{request\u id:vows.request\u id,总评分:sum(vows.rating)}
q2=来自请求中的请求,
左加入:协会中的歌曲(请求:歌曲),
left_join:rating in subquery(q2),on:request.id==rating.request_id,

其中:request.zone\u id==^zone\u id和request.times\u播放了“但不起作用…”是否导致编译错误?运行时错误?还是给出了错误的结果?我只是更新了问题。但它只是说:ERROR 42803(grouping\u ERROR):列“s0.id”必须出现在GROUP BY子句中,或者在聚合分析中用于将
GROUP\u BY:request.id
添加到
查询中。仍然不起作用。现在,另一个专栏也是如此。具体来说:*(Postgrex.Error)Error 42803(grouping_Error):列“v2.id”必须出现在GROUP BY子句中,或者在聚合函数中使用
  select: %{song: song, rating: sum(votes.rating)},
q1 = from votes in Vote,
     group_by: votes.request_id,
     select: %{request_id: votes.request_id, total_rating: sum(votes.rating)}

q2 = from request in Request,
     left_join: song in assoc(request, :song),
     left_join: rating in subquery(q2), on: request.id == rating.request_id,
     where: request.zone_id == ^zone_id and request.times_played <= ^max_played,
     select: %{title: song.title, url: song.url, thumbnail: song.thumbnail, rating: rating.total_rating},
     order_by:  [asc: request.times_played, desc: request.inserted_at]