【问题标题】:How can I write a PostgreSQL query using Sequel without raw SQL?如何在没有原始 SQL 的情况下使用 Sequel 编写 PostgreSQL 查询?
【发布时间】:2015-05-26 21:25:50
【问题描述】:

我的原始 SQL 查询是:

DB.fetch(' SELECT 
        p.project_name, 
        p.project_id,
        COUNT(i.expense_project_id) AS item_count,
        SUM(COALESCE(amount,0)) AS item_amount
 FROM expense_projects p 
 LEFT JOIN expense_items i ON p.project_id = i.expense_project_id      
 WHERE p.project_company_id = ?passed_param
 GROUP BY p.project_id, p.project_name').to_a.to_json

如何使用 Sequel ORM 编写此查询?

我后来找到了一个解决方案,如下所示。我之前做过很多努力,当我发布这个问题时,我应该包括我失败的努力之一,抱歉!在这里回答:

DB[:expense_projects___p].where(:project_company_id=>user_company_id).
  left_join(:expense_items___i, :expense_project_id=>:project_id).
  select_group(:p__project_name, :p__project_id).
  select_more{count(:i__item_id)}.
  select_more{sum(:i__amount)}.to_a.to_json

【问题讨论】:

  • 欢迎来到 Stack Overflow。在询问有关找出如何做某事的问题时,您通常会提供至少一个您尝试过的代码示例,并说明为什么它不能满足您的需求。如果不这样做,就好像你没有尝试过,只是希望有人为你写,这不是我们在这里所做的。我建议将您解决问题的尝试添加到问题中。另外,你在 Sequel 邮件列表或 IRC 频道上问过这个吗?
  • 谢谢,是的,我已经多次尝试,明天我会发布最接近的版本。我理解你的意思,如果我无意中似乎在滥用社区,我深表歉意。
  • 想一想:您的查询已经在 SQL(一种用于与数据库交互的通用行业标准语言)中工作 - 将其翻译成另一种特定于领域的语言是否会提高可读性、性能或可维护性代码?
  • 使用 ORM 的好处是它意味着查询变得更容易移植。相同的逻辑适用于 SQLite、MySQL、PostgreSQL、Oracle 等。纯 SQL 是可移植的,但大多数 DBM 需要特定于供应商的扩展来做任何利用 DBM 特性的事情。减少尽可能多的供应商特定代码是一件好事。我使用 SQLite 对想法进行本地测试,然后在我们的开发/测试主机上使用 PostgreSQL 或 MySQL。我们目前将 PostgreSQL 用于我们的生产系统,但很高兴我们可以在 Oracle DB 中使用相同的代码,而无需更改代码。
  • @user1903663,请将您的解决方案移动到答案中,而不是在您的问题中。 Stack Overflow 需要一个宽限期到期才能选择答案,但我建议您在找到解决方案后这样做。

标签: ruby postgresql sequel


【解决方案1】:
DB[:expense_projects___p].where(:project_company_id=>user_company_id).
  left_join(:expense_items___i, :expense_project_id=>:project_id).
  select_group(:p__project_name, :p__project_id).
  select_more{count(:i__item_id)}.
  select_more{sum(:i__amount)}.to_a.to_json

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    相关资源
    最近更新 更多