Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > Помощь в SQL запросе


Автор: derilshows 23.3.2016, 00:16
Всем привет! Очень нужен Ваш совет.

Есть БД, где в одной колонке записаны коды в виде: 10, 10-09, 10-10, 10-11, 15, 15-02, 15-03 и тд. Каждому значению соответсвтует месяц(в числовом формате). Я делаю SQL запрос, в котором выводится какие коды в каком месяце, с подсчетом сколько раз были вызваны. 
Выходит формат: СКОЛЬКО РАЗ БЫЛ ВЫЗВАН, В КАКОМ МЕСЯЦЕ, КАКОЙ КОД.
Например, будет вывод:

125, 04, 10-09
4, 04, 10-10
93, 05, 15-02
43, 05, 15-03


Что я хочу:

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

В итоге, должно выйти так:
129, 04, 10
136, 05, 15



Очень прошу помочь, совсем не представляю как это сделать. 

Автор: Akina 23.3.2016, 08:59
Совершенно невменяемое описание.

Показывайте:
  • Структуру хранения исходных данных с пояснением, в каком поле что хранится
  • Пример исходных данных в описанной выше структуре
  • Желаемый результат на показанных данных с объяснением, почему именно так

Автор: derilshows 23.3.2016, 21:58
Цитата(Akina @  23.3.2016,  08:59 Найти цитируемый пост)
Показывайте:

Я спрашивался с одной задачей(теперь в третьей колонке значения отображаются как их первые две цифры).

Структура такова:
Числовое значение, месяц, код
Number, Month, Code

Например. При запросе был такой вывод:
200 02 04-03
30 02 04-04
10 03 04-05

Теперь(третья колонка изменилась).
200 02 04
30 02 04
10 03 04

Но результат должен выглядеть так:
230 02 04
10 03 04

То есть, если значения третьей колонки одинаковы, и их месяца тоже, эти строчки нужно соеденить в одну, при условии что в первой колонке должна быть сумма соедененных значений. 

(Показано в примере, было 200 и 30 в двух строчках, но их месяцы оказались одинаковы, и коды в третьей колонке после преобразования, тоже, поэтому они стали одной единой строкой, где в числовые значения из первой коллонки суммировались). 

Надеюсь, корректно описал суть проблемы. 

Собственно, SQL код на данный момент:
Код

SELECT NUMBER, MONTH, COUNT(*), split_part(code, '-', 1)
  FROM tab
 GROUP BY MONTH, split_part(code, '-', 1)

Автор: Akina 24.3.2016, 09:01
Цитата(derilshows @  23.3.2016,  22:58 Найти цитируемый пост)
Структура такова

Структуру принято давать в формате CREATE TABLE. Сейчас не видно, например, типов полей...
Аналогично - исходные данные принято давать в формате INSERT .. SELECT либо INSERT .. VALUES.

Цитата(derilshows @  23.3.2016,  22:58 Найти цитируемый пост)

Number Month Code
200    02    04-03
 30    02    04-04
 10    03    04-05


Цитата(derilshows @  23.3.2016,  22:58 Найти цитируемый пост)
результат должен выглядеть так:
Number Month Code
230    02    04
 10    03    04

При таких исходных данных и описанной логике получения результата запрос будет таким:
Код

SELECT SUM(Number) AS Number, Month, SPLIT_PART(Code, '-', 1) AS Code
FROM tab
GROUP BY Month, SPLIT_PART(Code, '-', 1)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)