【发布时间】:2011-01-27 12:35:17
【问题描述】:
我有三个表Lot、Sale 和Company。我在下面附上了一个图表。
我需要从这些表中获取包含 10 个项目的结果集。我正在寻找以下字段——公司名称、平均数量、最高价格、最低价格 平均价格,销售数量。我设法像这样查询它们:
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
, AVG(quantity)
, MAX(price)
, MIN(price)
, AVG(price)
, 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
, 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 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;
【问题讨论】:
标签: ruby-on-rails-3 activerecord