Ecto查询:从基础到高级应用
1. 时长计算与 having 子句
在数据库查询中,时长值通常以秒为单位。若要将其转换为分钟和秒,需要进行一些数学运算。假设我们要筛选出总时长超过一小时(3600 秒)的专辑, where 子句无法满足需求,因为它只能限制参与时长统计的记录。而 having 子句则可在计算完曲目总时长后进行筛选。示例代码如下:
q = from t in "tracks", select: [t.album_id, sum(t.duration)],
group_by: t.album_id,
having: sum(t.duration) > 3600
Repo.all(q)
#=> [[2, 4491]]
上述代码执行后,会返回总时长超过 3600 秒的专辑 ID 及其总时长。不过,返回专辑名称而非 ID 会更有用,但此查询仅涉及 tracks 表,而专辑名称存储在 albums 表中。接下来将介绍如何跨表查询所需数据。
2. 连接查询(Joins)
随着查询复杂度和表达能力的提升,我们可能需要同时查询多个表,这时就需要使用连接查询。
2.1 连接查询的概念
“连接(join)”一词源于 SQL,它允许在同一查询中组合来自两个或多个表的数据。根据对不同表数据的筛选方式,连接有多种类型。若需要了解连接的基础知识或复习相关内容,可参考 <
超级会员免费看
订阅专栏 解锁全文
381

被折叠的 条评论
为什么被折叠?



