У меня есть три таблицы Lot
, Sale
и Company
.Ниже я приложил биграмму.
Мне нужно получить набор результатов из 10 элементов из этих таблиц.Я ищу следующие поля - company_name, среднее количество, максимальная цена, минимальная цена, средняя цена, количество продаж.Мне удалось запросить их следующим образом:
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;
Мне также нужна была средняя цена за единицу, сгруппированная по компании и номеру недели.(Мне нужно это как разделенный запятыми способ, чтобы я мог передать его API Google Chart. Поскольку нельзя использовать SUM
внутри GROUP_CONCAT
в SQLite, мне пришлось использовать это нечеткое встроенное представление.)
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 для извлечения данных.Может кто-нибудь показать мне, как я могу получить эти данные, используя ORM-метод Rails?
Я пытался быть как можно более подробным.Приношу свои извинения за упущения, если таковые имеются.
Спасибо
Найден способ объединить два запроса.
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;