我面临以下问题,我仍然是相当新的铁杆,我需要你的帮助
我有一个表 SALES ,包含4列:product_id,已售产品的数量,卖家和销售当天。
我还有其他表 PRODUCT_PRICE ,其中包含产品清单,价格和月份(基于月份的价格变化)
最后我还有其他表 PRODUCT ,其中包含产品的产品,说明和制造商ID。
我需要进行2次查询: - 前10个制造商在上个月销售更多产品 - 上个月收入增加(使用PRODUCT_PRICE表计算)的前10名卖家。
如何在Ruby on Rails中使用ActiveRecord执行此操作,我想使用rails关联来执行此操作。
谢谢!
答案 0 :(得分:0)
没有任何进一步的信息,没有经过测试并且非常困难,但是如果你有三个模型设置:
首先,基于此查询:
SELECT manufacturer_id FROM products
LEFT JOIN sales ON sales.product_id = products.id
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LIMIT 10
这将是这样的(你没有提到你正在使用哪个版本的Rails)
@top_manufacturers = Product.find(:all,
:select=> 'manufacturer_id FROM products',
:joins => 'LEFT JOIN sales ON sales.product_id = products.id',
:conditions => 'YEAR(created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)',
:limit => 10)
第二次
SELECT sales.seller_id, SUM(sales.quantity), SUM(product_prices.price) FROM sales
LEFT JOIN products ON products.id = sales.product_id
LEFT JOIN product_prices ON product_prices.product_id = products.id
WHERE YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH)
AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)
LIMIT 10
@top_sellers = Sale.find(:all,
:select => 'sales.seller_id, SUM(sales.quantity), SUM(product_prices.price)',
:joins => 'LEFT JOIN products ON products.id = sales.product_id LEFT JOIN product_prices ON product_prices.product_id = products.id',
:conditions => 'YEAR(sales.created_at) = YEAR(CURRENT_DATE - INTERVAL 1 MONTH) AND MONTH(sales.created_at) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH)',
:limit => 10)
如果您的所有表格中都没有created_at
和updated_at
列,那么您应该添加它们--Rails会自动填充它们,但我想我应该使用您的month
列。