1 Востаннє редагувалося Vasia Hudyma (03.12.2017 15:57:10)

Тема: Псевдонім стовпців в PostgreSQL

Добрий день! В мене виникло питання, чи можна зробити так, щоб в назві стовпця замість 2007 записати,  щось типу

(select extract (year from current_date))-10

, тобто якщо сьогодні 2017 рік то стовбець мав назву 2007, а якщо 2018 - 2008?

select sum(case when year_work = ((select extract (year from current_date))-10) then 1 else 0 end) as "2007",
sum(case when year_work = ((select extract (year from current_date))-9)  then 1 else 0 end) as "2008",
sum(case when year_work = ((select extract (year from current_date))-8) then 1 else 0 end) as "2009",
sum(case when year_work = ((select extract (year from current_date))-7) then 1 else 0 end) as "2010",
sum(case when year_work = ((select extract (year from current_date))-6) then 1 else 0 end) as "2011",
sum(case when year_work = ((select extract (year from current_date))-5) then 1 else 0 end) as "2012",
sum(case when year_work = ((select extract (year from current_date))-4) then 1 else 0 end) as "2013",
sum(case when year_work = ((select extract (year from current_date))-3) then 1 else 0 end) as "2014",
sum(case when year_work = ((select extract (year from current_date))-2) then 1 else 0 end) as "2015",
sum(case when year_work = ((select extract (year from current_date))-1) then 1 else 0 end) as "2016",
sum(case when year_work = (select extract (year from current_date)) then 1 else 0 end) as "2017"    
from rodovische;

2

Re: Псевдонім стовпців в PostgreSQL

У мене така підозра, що ви взагалі щось зовсім не те робите. Яке завдання?

3

Re: Псевдонім стовпців в PostgreSQL

можливо то краще силами мови програмування робити,
не силами субд ?

4

Re: Псевдонім стовпців в PostgreSQL

koala написав:

У мене така підозра, що ви взагалі щось зовсім не те робите. Яке завдання?

В мене є таблиця у якій розміщені дані про родовища - назва, розмір, рік відкриття і тд.
Мені потрібно  відобразити динаміку (кількість) введення родовищ у розробку
по Україні протягом останніх 10 років.

5

Re: Псевдонім стовпців в PostgreSQL

221VOLT написав:

можливо то краще силами мови програмування робити,
не силами субд ?

Потрібно це реалізувати за допомогою СУБД

6

Re: Псевдонім стовпців в PostgreSQL

Я поки що бачу, що ви запитуєте багато однотипних даних у різні стовпчики в 1 рядок, а в принципі має бути навпаки - однотипні дані в 1 стовпчик із багатьма рядками. Одразу скоротите запит.
Ну і підзапити-select-и не потрібні, там просто можна extract викликати, це звичайна функція.

Подякували: leofun011

7 Востаннє редагувалося Vasia Hudyma (03.12.2017 18:30:21)

Re: Псевдонім стовпців в PostgreSQL

Vasia Hudyma написав:
koala написав:

У мене така підозра, що ви взагалі щось зовсім не те робите. Яке завдання?

В мене є таблиця у якій розміщені дані про родовища - назва, розмір, рік відкриття і тд.
Мені потрібно  відобразити динаміку (кількість) введення родовищ у розробку
по Україні протягом останніх 10 років.

В даний момент запит видає такий результат
http://prntscr.com/hij3xx

8

Re: Псевдонім стовпців в PostgreSQL

Vasia Hudyma написав:
koala написав:

У мене така підозра, що ви взагалі щось зовсім не те робите. Яке завдання?

В мене є таблиця у якій розміщені дані про родовища - назва, розмір, рік відкриття і тд.
Мені потрібно  відобразити динаміку (кількість) введення родовищ у розробку
по Україні протягом останніх 10 років.

Так робіть це в стовпчик, у завданні нічого про рядки немає.

Подякували: Vasia Hudyma1

9

Re: Псевдонім стовпців в PostgreSQL

koala написав:
Vasia Hudyma написав:
koala написав:

У мене така підозра, що ви взагалі щось зовсім не те робите. Яке завдання?

В мене є таблиця у якій розміщені дані про родовища - назва, розмір, рік відкриття і тд.
Мені потрібно  відобразити динаміку (кількість) введення родовищ у розробку
по Україні протягом останніх 10 років.

Так робіть це в стовпчик, у завданні нічого про рядки немає.

Добре, спробую в стовпчик, дякую.

10

Re: Псевдонім стовпців в PostgreSQL

Обережно, наведені нижче приклади працюють для MySQL.
Для PostgreSQL імена системних функцій і синтаксис можуть відрізнятися.
Вам потрібно щось таке :

DELIMITER $$
DROP PROCEDURE IF EXISTS proc_last_n_years$$
CREATE PROCEDURE proc_last_n_years(n INT)
BEGIN
    DECLARE cnt INT DEFAULT 0;
    CREATE TEMPORARY TABLE t ( year INT );
    WHILE cnt < n DO
        INSERT INTO t
            SELECT YEAR(CURDATE()) - cnt;
        SET cnt = cnt + 1;
    END WHILE;
    Select * FROM t;
END$$
DELIMITER ;

А потім викликати з заданою кількістю років :

CALL proc_last_n_years(10);
Подякували: 221VOLT, Vasia Hudyma2

11 Востаннє редагувалося koala (03.12.2017 22:31:39)

Re: Псевдонім стовпців в PostgreSQL

Ніби найправильніше буде так (оновив):
http://sqlfiddle.com/#!17/9fb14/33

Подякували: 221VOLT, Vasia Hudyma, leofun013

12

Re: Псевдонім стовпців в PostgreSQL

koala написав:

Ніби найправильніше буде так (оновив):
http://sqlfiddle.com/#!17/9fb14/33

Дуже вдячний за допомогу!