加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-3 – 帮助查询Rails中的数据

发布时间:2020-12-17 01:58:32 所属栏目:百科 来源:网络整理
导读:我有三张表Lot,Sale和Company.我在下面贴了一个数字图. 我需要从这些表中获取10个项目的结果集.我正在寻找以下字段 – company_name,平均数量,最高价格,最低价格 平均价格,销售数量.我设法像这样查询它们: SELECT company_id,AVG(quantity),MAX(price),MIN(
我有三张表Lot,Sale和Company.我在下面贴了一个数字图.

我需要从这些表中获取10个项目的结果集.我正在寻找以下字段 – company_name,平均数量,最高价格,最低价格
平均价格,销售数量.我设法像这样查询它们:

SELECT company_id,AVG(quantity),MAX(price),MIN(price),AVG(price),COUNT(sale_id)
  FROM lots
 GROUP
    BY company_id
 ORDER
    BY AVG(quantity) ASC
 LIMIT 10;

我还需要按公司分组的平均每单位价格和周数. (我需要这个以逗号分隔的方式,以便我可以将它传递给Google Chart API.由于一个人不能在SQLite中的GROUP_CONCAT中使用SUM,我不得不使用这个非常简单的内联视图.)

SELECT company_id,GROUP_CONCAT(price_per_unit)
  FROM (
        SELECT company_id,sales.week,SUM(price * quantity) / SUM(quantity) AS price_per_unit
          FROM lots
          JOIN sales
            ON lots.sale_id = sales.id
         GROUP
            BY company_id,sales.week
         ORDER
            BY company_id ASC,sales.week ASC
      )
 GROUP
    BY company_id;

来自SQL背景,我发现有点难以使用ORM模型来获取数据.有人能告诉我如何使用Rails ORM方式获取这些数据吗?

我试图尽可能地冗长.对于遗漏,我是道歉,如果有的话.

谢谢

找到了加入这两个查询的方法.

SELECT lots.company_id,COUNT(sale_id),x.price_per_unit
  FROM lots
  JOIN
     (
      SELECT company_id,GROUP_CONCAT(price_per_unit) AS price_per_unit
        FROM (
              SELECT company_id,SUM(price * quantity) / SUM(quantity) AS price_per_unit
                FROM lots
                JOIN sales
                  ON lots.sale_id = sales.id
               GROUP
                  BY company_id,sales.week
               ORDER
                  BY sales.week ASC
            )
       GROUP
          BY company_id
     ) x
    ON lots.company_id = x.company_id
 GROUP
    BY lots.company_id
 ORDER
    BY AVG(quantity) ASC
 LIMIT 10;

解决方法

我通过使用find_by_sql方法完成了这个.它似乎比其他任何东西都更易于管理.

这是一个片段:

sql = <<EOS
      SELECT lots.company_id,AVG(quantity) AS avg_quantity,MAX(price) AS max_price,MIN(price) AS min_prices,AVG(price) AS avg_price,COUNT(sale_id) AS cnt_sales,x.price_per_unit
        FROM lots
        JOIN
           (
            SELECT company_id,GROUP_CONCAT(price_per_unit) AS price_per_unit
              FROM (
                    SELECT company_id,SUM(price * quantity) / SUM(quantity) AS price_per_unit
                      FROM lots
                      JOIN sales
                        ON lots.sale_id = sales.id
                     GROUP
                        BY company_id,sales.week
                     ORDER
                        BY sales.week ASC
                  )
             GROUP
                BY company_id
           ) x
          ON lots.company_id = x.company_id
       GROUP
          BY lots.company_id
       ORDER
          BY AVG(quantity) ASC
       LIMIT 10
EOS

      @items = Lot.find_by_sql(sql)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读