Перевести SQL-запрос в ActiveRecord Query - PullRequest
0 голосов
/ 16 октября 2018

Как мне написать этот запрос на терминале рельсов?

select
    month(created_at) as 'mês',
    sum(points) as 'total de pontos',
    count(*) as 'operações',
    avg(points) as 'média'
from
    cashmilhas_07_16.operations
where
    operation_type = 1
    and created_at >= '2018-01-01'
group by
    year(created_at),
    month(created_at)

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Я использую этот метод:

sql = "ВЫБЕРИТЕ МЕСЯЦ (созданный_) в качестве 'mês', сумму (баллы) в качестве 'total de pontos', count (*) в качестве 'operações', avg (points) как 'média', avg (стоимость) как 'custo médio', avg (стоимость) * (сумма (баллы) / 10000) как 'gasto total' ОТ операций, где тип_операции = 2 И source_target_id = 1 И созданный_at> = '2018-01-01 'GROUP BY YEAR (созданный_кат), МЕСЯЦ (созданный_кат); "

results = ActiveRecord :: Base.connection.exec_query (sql)

results.rows

0 голосов
/ 16 октября 2018

Самое простое:

Operation.find_by_sql [
  'select
      month(created_at) as "mês",
      sum(points) as "total de pontos",
      count(*) as "operações",
      avg(points) as "média"
    from cashmilhas_07_16.operations
    where operation_type = :type and created_at >= :date
    group by year(created_at), month(created_at)',
  { type: 1, date: '2018-01-01' }
]

Или:

Operation.where("operation_type = :type and created_at >= :date", { type: 1, date: '2018-01-01' })
         .select('month(created_at) as "mês", sum(points) as "total de pontos", count(*) as "operações", avg(points) as "média"')
         .group("year(created_at), month(created_at)")

Оба метода хорошо описаны в Rails API

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