Хобрук: Ваш путь к мастерству в программировании

Ошибка с group() из SQlite в PostgreSQL в Rails

Я пытаюсь загрузить свое приложение в героку, но это выдает ошибку в этом утверждении:

@exhibition.enrolments.select(:id).group('payment_id')

ActiveRecord::StatementInvalid (PG::GroupingError: ОШИБКА: столбец "enrolments.id" должен присутствовать в предложении GROUP BY или использоваться в агрегатной функции

В SQlite у меня не было ошибок, но в Production они есть.

Вопрос такой: у меня есть:

enrolment_id | payment_id | ....
1            | 1          | ....
2            | 1          | ....
3            | 2          | ....
4            | 3          | ....
5            | 3          | ....

И я хочу получить идентификаторы регистраций 2,3 и 4.

Я тоже пробовал это:

@exhibition.enrolments.select(:id).group('enrolment.id, payment_id')

Он работает, но он просто дает мне все записи, очевидно...

Я читал много сообщений об этом, но я не получил решение...

Любая помощь? Спасибо.

ИЗМЕНИТЬ:

Я имею в виду:

И я хочу получить идентификаторы регистраций 2, 3 и 5.

Наибольший enrolment_id в каждом блоке платежей с таким же id.

Спасибо Фрэнк Хейкенс


  • Пробовали ли вы искать слова, которые должны появляться в предложении GROUP BY или использоваться в агрегатной функции, используя любой из найденных вами подходов? PS: Прекратите разработку поверх одной базы данных и развертывание в другой, Rails/ActiveRecord практически не дает вам полезной переносимости. 27.01.2015
  • Да, я пробовал и все еще читаю, но не нашел решения, которое могло бы мне подойти. И вы правы, но это просто мое первое приложение на рельсах :/ Ty 27.01.2015
  • И я хочу получить идентификаторы регистраций 2,3 и 4. Не могли бы вы объяснить, почему эти идентификаторы должны появляться? Какая логика должна быть в вашем запросе, чтобы выбрать именно эти значения. Я не понимаю, как должна работать GROUP BY, я что-то упускаю. 27.01.2015

Ответы:


1

Так дайте ему агрегатную функцию, которую он хочет?

@exhibition.enrolments.select(:id).group('payment_id').max(:id)

Кроме того, вы можете упорядочить записи и использовать разные

@exhibition.enrolments.order('payment_id DESC').select(:payment_id).distinct
27.01.2015
  • Я не могу проголосовать за ваш ответ, но он работает... Большое спасибо! Это как раз то, что мне было нужно. 27.01.2015
  • Новые материалы

    Получение стоковых обновлений с помощью Python
    Для начинающего финансового аналитика Введение Описание: Этот проект Python создает скрипт для получения текущих обновлений акций с финансового веб-сайта Yahoo. Для этого проекта мы..

    Это все, что вам нужно знать о Kotlin в 2022 году
    Добро пожаловать! Kotlin — это язык программирования, популярность которого, кажется, растет, его действительно можно использовать для создания чего угодно, и если вы хотите узнать о Kotlin,..

    Текстовый графический интерфейс с Lanterna на Java
    Мой опыт работы с компьютерами (и текстовыми графическими пользовательскими интерфейсами) начался еще в восьмидесятых, когда я был ребенком, на дне рождения друга. Это был «новенький» Amstrad..

    Перезарядите свой мозг: умопомрачительный потенциал мозговых компьютерных интерфейсов
    Способность читать свои мысли и управлять объектами разумом долгое время были предметом человеческого любопытства, ограниченного областью научной фантастики… то есть до сих пор? С технологией,..

    Основы C# — Нулевой оператор объединения (??)
    Оператор ?? называется null-coalescing operator . Этот оператор используется для предоставления значения по умолчанию, если значение операнда в левой части оператора равно null ...

    Сравнение номеров версий в C++ с использованием синтаксического анализа строк
    Номера версий обычно используются для обозначения развития или обновлений программного обеспечения или любого другого продукта. При работе с номерами версий в C++ может быть полезно сравнить две..

    В мир искусственного интеллекта…
    ИИ — это новое топливо в современном мире. Куда бы вы ни обратились, с кем бы вы ни разговаривали — они, как правило, упоминают об ИИ хотя бы раз в ходе разговора. ИИ гудит повсюду. У каждого..