0

所以我需要生成一些仪表板,这些仪表板大部分依靠MySQL中的总和查询来工作。Rails Activerecord + MySQL查询没有给出结果我期望

这里是在模型中轨查询:

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 

它的工作原理,但问题是,在轨控制台输出是不是我所期望得到的仪表板。

[#,#,#]作为输出,如果我分配d年(这是来自其他地方的输入),以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 ||!Ship || !CS || !共 | - | 40 || 8810 || 0 || 1081 || 19181 ||连接器 | - | 118 || 318 || 0 || 0 || 955 || EU Cords | - | 256 || 548 || 0 || 0 || 3944 ||美国线 |}

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

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

+0

我猜mediawiki表格布局的东西不起作用。底线是轨道查询正在使用数量为40,118和256的第一列,而不是使用所有这些数量之和的总和。 如何让它使用查询的总列(这是一个临时列)。 – Shenanigator

回答

0

好吧,我非常接近;

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有问题,但这可能是后来的另一篇文章。

+0

事实证明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' – Shenanigator