【问题标题】:Rails Activerecord + MySQL query not giving the result I expectRails Activerecord + MySQL 查询没有给出我期望的结果
【发布时间】:2015-05-19 14:19:47
【问题描述】:

所以我需要生成一些仪表板,而这些仪表板中的大多数都依赖 MySQL 中的求和查询来工作。

这是模型中的 rails 查询:

def self.search_three(dyear)
    find_by_sql("SELECT quantity, model,
SUM(IF(status = 'Completed',quantity,0)) AS Comp,
SUM(IF(status = 'Shipped',quantity,0)) AS Ship,
SUM(IF(status = 'Cart Submitted',quantity,0)) AS CS,
SUM(quantity) AS total
FROM orders
WHERE YEAR(needby) = '#{dyear}'
GROUP BY model")
  end

它可以工作,但问题是 rails 控制台中的输出不是我期望的仪表板输出。

[#, #, #] 如果我将 dyear(这是来自其他地方的输入)分配给 2015 年,则输出。

但是,当我在 MySQL 工作台中这样做时:

SELECT quantity,
SUM(IF(status = 'Completed',quantity,0)) AS Comp,
SUM(IF(status = 'Shipped',quantity,0)) AS Ship,
SUM(IF(status = 'Cart Submitted',quantity,0)) AS CS,
SUM(quantity) AS total
FROM orders
WHERE YEAR(needby) = '2015'
GROUP BY model

我明白了

{| !数量 || !Comp ||!船舶|| !CS || !全部的 |- |40 || 8810 || 0 || 1081 || 19181 ||连接器 |- |118 || 318 || 0 || 0 || 955 ||欧盟线 |- |256 || 548 || 0 || 0 || 3944 ||美国线 |}

我需要图表显示的是总列,而图表将显示的是上述不正确的数量。

如何让 rails 查询使用 AS 总数而不是第一列作为输出?

【问题讨论】:

  • 我猜 mediawiki 表格布局的东西不起作用。最重要的是,rails 查询使用数量下的第一列,其值为 40,118 和 256,而不是使用作为所有这些数量总和的总数。如何让它使用查询的总列(这是一个临时列)。

标签: mysql ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord


【解决方案1】:

好的,我已经很接近了;

def self.search_three(dyear)
    find_by_sql("SELECT model,
SUM(IF(status = 'Completed',quantity,0)) AS Comp,
SUM(IF(status = 'Shipped',quantity,0)) AS Ship,
SUM(IF(status = 'Cart Submitted',quantity,0)) AS CS,
SUM(quantity) AS quantity
FROM orders
WHERE YEAR(needby) = '#{dyear}'
GROUP BY model")
  end

这主要给了我预期的输出;虽然它确实显示了以下内容:

[#<Order id: nil, quantity: 19181, model: "Connector">, #<Order id: nil, quantity: 955, model: "EU Cords">, #<Order id: nil, quantity: 3944, model: "US Cords">]

我认为其中的 Order id 部分可能对 chartkick 有问题,但这可能是稍后的另一篇文章。

【讨论】:

  • 原来chartkick gem 不喜欢find_by_sql,但这没关系;我将代码重构如下:code def self.search_three(dyear) select('model').where("status IN ('Completed','Shipped','Cart Submitted') AND YEAR(needby) = '#{dyear}'").group('model').sum(:quantity) end
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 2014-11-22
  • 2019-08-07
  • 1970-01-01
相关资源
最近更新 更多