Вопрос

Ищу запрос в Informix's SQL, который будет имитировать MySQL's group_concat функция.

Что такое MySQL group_concat делает это, создавая перечисление всех участников в группе.

Итак, с данными следующим образом:

orderid:itemName:price
      1:Paper   :10
      1:Pen     :5
      2:Sugar   :15

и следующий запрос:

select group_concat(itemName), sum(price)
from order_details
group by orderid

произвел бы:

items    :price
Paper,Pen:15
Sugar    :15

Какой был бы наиболее эффективный способ достичь этого в Informix?Обязательно ли нам было бы использовать хранимую процедуру?

Это было полезно?

Решение

Для этого вам нужно было бы определить определяемый пользователем агрегат.Который состоит из четырех частей - четырех функций (поиск СОЗДАТЬ АГРЕГАТ в IDS 12.10 Информационный центр):

  1. Инициализатор (INIT)
  2. Итератор (ITER)
  3. Комбайн (COMBINE)
  4. Финализатор (FINAL)

Это официальная терминология, написанная заглавными буквами, и она в меру интуитивно понятна.Подумайте о вычислении среднего значения.

  1. Инициализатор:установленная сумма = 0;N = 0
  2. Итератор:установленная сумма += x;N++
  3. Объединитель:установленная сумма = сумма1 + сум2;установите N = N1 + N2
  4. Завершитель:результат = сумма / N - с проверками N= 0 (деление на ноль)

Объединитель используется для объединения промежуточных результатов параллельного выполнения;каждое параллельное выполнение начинается с итератора и генерирует промежуточные результаты.Когда параллельное выполнение завершается, отдельные наборы значений объединяются с помощью объединителя.

Вы можете написать аналогичный код в IDS - используя хранимые процедуры или C или Java UDR.

Смотрите вопрос SO Показать отношение "один ко многим" в виде 2 столбцов — 1 уникальной строки (список идентификаторов и разделенных запятыми) для функции GROUP_CONCAT() на основе строк, реализованной в Informix.

Другие советы

Конечно, в Informix нет встроенной функции для этого.Есть ли у какой-либо другой основной СУБД такая причудливая агрегатная функция?Упорядочение по столбцу, не выбранному в запросе, немного сомнительно, но группировка?Это что-то новенькое для меня.

Вам пришлось бы написать хранимую процедуру или UDR, чтобы сгенерировать такой набор данных.Честно говоря, я бы не стал пытаться сделать это в базе данных.Это похоже на задачу, лучше всего подходящую для потребителя этого вывода (т. Е. приложения / веб-приложения / составителя отчетов и т.д.).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top