Rails Activerecord + MySQL 查询没有给出我期望的结果
Rails Activerecord + MySQL query not giving the result I expect
所以我需要生成一些仪表板,而这些仪表板中的大部分都依赖 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,这就是输出。
但是,在MySQLworkbench的时候我做了:
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章欧盟电线
|-
|256 ||第548章0 || 0 ||第3944章美国电线
|}
我需要图表显示的是总计列,而图表将显示的是上述不正确的数量。
如何让 rails 查询使用 AS 总计作为输出而不只是第一列?
好吧,我已经很接近了;
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">]
我认为其中的订单 ID 部分可能对 chartkick 有问题,但那是另一个 post 以后可能。
所以我需要生成一些仪表板,而这些仪表板中的大部分都依赖 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,这就是输出。
但是,在MySQLworkbench的时候我做了:
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章欧盟电线 |- |256 ||第548章0 || 0 ||第3944章美国电线 |}
我需要图表显示的是总计列,而图表将显示的是上述不正确的数量。
如何让 rails 查询使用 AS 总计作为输出而不只是第一列?
好吧,我已经很接近了;
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">]
我认为其中的订单 ID 部分可能对 chartkick 有问题,但那是另一个 post 以后可能。