Найти общее количество клиентов, имеющих не менее 5 заказов (COUNT с JOIN, GROUP BY и HAVING) - PullRequest
3 голосов
/ 22 января 2012

Я могу найти общее количество клиентов по крайней мере с 5 заказами, использующими SQL COUNT с подзапросом:

SELECT COUNT(*) FROM (

  SELECT c.id FROM customers as c
  INNER JOIN orders as o ON c.id = o.customer_id
  GROUP BY c.id
  HAVING COUNT(o.id) >= 5

) as temp

Однако я хотел бы знать, как добиться того же, используя активную запись RailsИнтерфейс запроса, если это возможно.

У меня есть код:

total_count = Customer.joins("INNER JOIN orders ON customers.id = orders.customer_id").group("customers.id").having("COUNT(orders.id) >= 5").count

Но это приводит к хэш-карте идентификатора клиента и количества заказов, потому что генерируемый SQL выглядит как:

SELECT COUNT(*) AS count_all, customers.id AS customers_id FROM `customers` INNER JOIN orders ON customers.id = orders.customer_id GROUP BY customers.id HAVING COUNT(orders.id) >= 5

Есть ли другой способ достичь того, к чему я стремлюсь, используя соглашения Rails?Или мне просто создать необработанный запрос?

1 Ответ

0 голосов
/ 22 января 2012

Вам нужно присоединиться, если вы хотите получить какую-то другую информацию от клиентов, например, их имена или что-то в этом роде.Если количество - это все, что вам нужно, просто выполните простой запрос к таблице заказов:

SELECT * FROM orders
GROUP BY customer_id
HAVING COUNT(customer_id) >= 5

и подсчитайте строки в наборе результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...