Rails Postgres 查询,仅选择出现在所有搜索参数中且具有关联的项目

2023-12-15

我正在寻找基于一些用户选择参数创建一个 Postgres 查询。

用户将选择商店以及开始和结束年份。提交后,我只想显示仅存在于所选所有年份的商品的平均价格。

例如,用户选择开始日期为 2014 年,结束日期为 2018 年。项目香蕉在所有这些年份都有特征,但苹果仅在 2014 年、2015 年和 2017 年有特征。所以我的最终结果将只显示香蕉的平均价格,而不显示香蕉的平均价格。苹果。

到目前为止,这是我开发的查询。我不确定如何最好地实现仅对所有搜索年份中出现的项目进行平均的部分。

@sale_averages = Sale.joins(:shops, :items).where('extract(year from season_year) < ? AND extract(year from season_year) > ? ', params[:start_year], params[:end_year])
.where('shops.name = ?', params[:select_shop])
.select('items.name, AVG(sale.price) as price').group('shop.name')

Schema

create_table "items", force: :cascade do |t|
 t.string "name"
end

create_table "sales", force: :cascade do |t|
 t.integer "shop_id"
 t.integer "item_id"
 t.date "season_year"
 t.decimal "price"
end

create_table "shops", force: :cascade do |t|
 t.string "name"
end

您可以查看每年有哪些项目有记录。您可以通过检查每个项目的不同年份数是否等于总年份来做到这一点(使用COUNT DISTINCT):

 number_years = params[:end_year].to_i - params[:start_year].to_i + 1
 @sale_averages = Sale.joins(:shops, :items)
                      .select('items.name, AVG(sale.price) as price')
                      .where("EXTRACT(year from season_year) BETWEEN #{params[:start_year]} AND #{params[:end_year]}")
                      .where('shops.name': params[:select_shop])
                      .group('items.name')
                      .having("(COUNT(DISTINCT(EXTRACT(year from season_year))) = #{number_years})")

我也用过BETWEEN代替< and >。 我认为您想按商品名称而不是商店进行分组(就像您原始查询中的那样)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails Postgres 查询,仅选择出现在所有搜索参数中且具有关联的项目 的相关文章

随机推荐

  • 如何重构数千行Java代码?有没有可用的工具?

    在我们的应用程序中 我们有两个或三个类 其中包含整个 Java Swing 应用程序逻辑 这两个或三个类包含大约 7k 行代码 现在我被分配了重构这段 Java 代码的任务 我该如何开始 有没有可用的工具可以进行重构或至少指导我们 我推荐
  • 使用 ASP.NET MVC 的 HttpHandler

    如果我有一个标准 AXD HttpHandler 和 axd 的默认忽略路由 那么为什么 ASP NET MVC 仍然处理子目录中的请求 例如 如果有针对 Content Css css 的请求 axd d 如果请求是在 root css
  • 为什么这个 .equals() 代码示例返回“false”? [复制]

    这个问题在这里已经有答案了 考虑 class Dog int height int weight String name public class DogTest public static void main String args Do
  • MySQL将CHAR(32)数据类型转换为BINARY(16)而不丢失数据

    嗨 我有一张桌子 其中有一列char 32 数据类型 我需要将其转换为BINARY 16 数据类型 我尝试过更改列类型 但这会删除列中的所有数据 以下代码是我更新列的数据类型的方法 这导致我丢失了该列中的所有数据 ALTER TABLE t
  • 我的代码的 Boost 更新问题

    我最近将 boost 更新到 1 59 并安装在 usr local 中 我的系统默认安装在 usr 并且是1 46 我使用的是ubuntu 12 04 我的代码库使用 ROS Hydro 机器人操作系统 我有一个相当大的代码库 在更新之前
  • 是(n+1)!按照 (n!) 的顺序?你能给我一个证明吗?

    那 n 1 呢 另外 如果你能给我一个证明 可以帮助我更好地理解 我被困在这一点上 证明 n 1 在 O n 中 你必须证明存在一个常数 c 以便对于所有足够大的 n n gt n0 不等式 n 1 lt c n 成立 然而 由于 n 1
  • 使用 jquery 将下拉菜单链接到锚文本

    我在我的页面上选择下拉菜单
  • 未找到名为 os 的模块 - Django、mod_wsgi、Apache 2.2

    我正在尝试设置 apache mod wsgi 和 django 我的 apache 错误日志中出现了内部服务器错误 Wed Jun 22 21 31 55 2011 error client 1 mod wsgi pid 2893 Tar
  • 将 Json 文件内容保存到 python/pandas 中的 CSV 文件

    如何将 数据 信息放入最后所示的 csv 表中 以及正确的 标头 以便源服务器不会让我以为我正在抓取数据 到目前为止我写的代码如下 import requests json headers User Agent Mozilla 5 0 da
  • 令人困惑的宏和枚举定义

    我正在浏览一些 Route netlink 源代码 我想弄清楚 RTNLGRP NEIGH 的值是多少 Source http lxr free electrons com source include linux rtnetlink h
  • 使用 OpenGLES 抗锯齿去除绳索的锯齿状边缘

    我已经实现了绳索 其中我使用 Revolute 关节连接动态 b2bodied 现在我成功创建了这条绳索 但我的绳索看起来不光滑 我希望它们像丝带一样光滑 任何对此有想法的人 我发现它可以通过 openGLES 使用抗锯齿来实现 但仍然不知
  • PHP SimpleXML 大文件没有额外的内存使用

    在每一篇有关 SimpleXML 性能和内存使用的文章中 都会提到所有解析的内容都存储在内存中 处理大文件将导致大量的内存使用 但最近我发现使用 SimpleXML 处理大文件不会导致大量内存使用 甚至几乎不会导致内存使用 有我的测试脚本
  • 删除 Azure 资源组中年龄超过 x 天的所有资源

    我尝试在资源组 python api 中的资源上 扩展 creationTime 这样我就可以找到它的年龄 如果 gt max age days 我就会删除资源组中的资源 但creationTime似乎在资源上不可用 是否有另一种方法可以根
  • 用多种颜色为轴刻度文本着色

    我正在尝试绘制一个heatmap using R s plotly包 我希望为 y 轴刻度文本的特定标签设置特定的颜色 这是一个示例数据集 set seed 1 df lt reshape2 melt matrix rnorm 100 10
  • ASIO 示例代码在应该之前关闭套接字

    我需要一个使用 ASIO 的并行同步 TCP 解决方案 我正在尝试从这些示例中获取示例代码 https github com jvillasante asio network programming cookbook tree master
  • Java 中的检查异常与非检查异常

    我在理解之间的差异时遇到一些问题checked and uncheckedJava 中的异常 首先 checked异常应该在编译时查找异常 不同来源提供的示例引用了数据库连接 文件处理等其中一些 而unchecked异常应该查找程序员的错误
  • 如何在非 UWP C# 项目中访问 Windows.Gaming.Input?

    我见过一些在 C 控制台应用程序中使用 Windows Gaming Input 的示例 但是否也可以在非 UWP C 项目中访问它 Thanks 我已经通过执行以下操作成功做到了这一点 确保 VisualStudio 未运行 打开你的项目
  • Magento - 显示产品所属的类别

    我使用下面的代码在我的产品页面上显示产品所属的类别 但我经营相同产品的多商店 它还显示其他网站的类别 如何只显示我正在访问的网站的类别 a href a
  • Jquery load() 一个包含 JavaScript 的 html 文件

    我有一个很大的困境 我想加载一个 html文件包含 javascript google 地图 代码来渲染其中的 div maps html 看起来像这样
  • Rails Postgres 查询,仅选择出现在所有搜索参数中且具有关联的项目

    我正在寻找基于一些用户选择参数创建一个 Postgres 查询 用户将选择商店以及开始和结束年份 提交后 我只想显示仅存在于所选所有年份的商品的平均价格 例如 用户选择开始日期为 2014 年 结束日期为 2018 年 项目香蕉在所有这些年