有没有办法在 Ecto 查询中将属性列表迭代到 select?
Is there a way to iterate over a list of attributes to select in an Ecto query?
所以,我有一个查询,我正在尝试构建其中有一个列表 attributes
,它是 table 上的列。此查询是按属性列表、计数和 return 计数与属性列表进行分组。最后一部分是我难以实现的。现在我有
defmodule ProjectName.Counter do
import Ecto.Query, only: [group_by: 3, select: 3]
def group_and_count(queryable, groups) do
queryable
|> group_by([q], ^groups)
|> select([q], count(q.id))
end
end
我在上下文中这样调用的
Track
|> Counter.group_and_count([:album, :artist])
|> Repo.all()
哪个 return 是我 [1, 5, 4, 2]
是正确的,但不是我想要的 return。我想实际查询
SELECT COUNT(*), tracks.album, tracks.artist FROM tracks GROUP BY tracks.album, tracks.artist
这会 return
[[1, "Calypso", "Harry Belafonte"],
[5, "Silk & Soul", "Nina Simone"],
[4, "Hello, Dolly!", "Louis Armstrong"],
[2, "Pure Gold", "Perry Como"]]
我怎样才能更改我的代码以使其工作?我想不出在 select
查询中迭代 groups
的方法。
所以,我有一个查询,我正在尝试构建其中有一个列表 attributes
,它是 table 上的列。此查询是按属性列表、计数和 return 计数与属性列表进行分组。最后一部分是我难以实现的。现在我有
defmodule ProjectName.Counter do
import Ecto.Query, only: [group_by: 3, select: 3]
def group_and_count(queryable, groups) do
queryable
|> group_by([q], ^groups)
|> select([q], count(q.id))
end
end
我在上下文中这样调用的
Track
|> Counter.group_and_count([:album, :artist])
|> Repo.all()
哪个 return 是我 [1, 5, 4, 2]
是正确的,但不是我想要的 return。我想实际查询
SELECT COUNT(*), tracks.album, tracks.artist FROM tracks GROUP BY tracks.album, tracks.artist
这会 return
[[1, "Calypso", "Harry Belafonte"],
[5, "Silk & Soul", "Nina Simone"],
[4, "Hello, Dolly!", "Louis Armstrong"],
[2, "Pure Gold", "Perry Como"]]
我怎样才能更改我的代码以使其工作?我想不出在 select
查询中迭代 groups
的方法。