Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сумма значений за период / 10 сообщений из 10, страница 1 из 1
31.07.2015, 14:12
    #39020421
HasT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
Есть таблица вида:
date count1600 11609 11634 11639 11744 11800 191827 11830 11835 21840 41845 11850 31855 11860 41867 21868 21869 21870 81873 11875 11877 11880 201881 11882 11884 21885 31886 11887 21888 21889 21890 321891 41892 51893 21894 3
где date - год, count - количество
Как из данной таблицы получить таблицу вида?
period count1500 - 1800 51800 - 1850 281850 - 1875 231875 - 1900 82
где period - период, count - сумма значений за период?
Пример условий:
Код: sql
1.
2.
3.
4.
WHERE date >= 1500 AND date < 1800
WHERE date >= 1800 AND date < 1850
WHERE date >= 1850 AND date < 1875
WHERE date >= 1875 AND date < 1900


Спасибо!
...
Рейтинг: 0 / 0
31.07.2015, 14:17
    #39020432
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
HasT,

sum() и group by
...
Рейтинг: 0 / 0
31.07.2015, 14:47
    #39020478
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
CASE
 WHEN date >= 1500 AND date < 1800 THEN '1500 - 1800'::TEXT
 ELSE WHEN date >= 1800 AND date < 1850 THEN '1800 - 1850'::TEXT
 ELSE WHEN date >= 1850 AND date < 1875 THEN '1850 - 1875'::TEXT
 ELSE  '1875 - 1900'::TEXT
END AS period,
SUM(count)
FROM table1
GROUP BY 1
ORDER BY 1


?
...
Рейтинг: 0 / 0
31.07.2015, 14:51
    #39020484
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
PCContra
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
CASE
 WHEN date >= 1500 AND date < 1800 THEN '1500 - 1800'::TEXT
 WHEN date >= 1800 AND date < 1850 THEN '1800 - 1850'::TEXT
 WHEN date >= 1850 AND date < 1875 THEN '1850 - 1875'::TEXT
 ELSE  '1875 - 1900'::TEXT  -- if data between 2000 and 2100 ?
END AS period,
SUM(count)
FROM table1
GROUP BY 1
ORDER BY 1


?
тщательнЕе надо ребята, а тож тоже -- c2h5oh на пару -- и не берёт
...
Рейтинг: 0 / 0
31.07.2015, 15:32
    #39020539
PCContra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
qwwqPCContra
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
CASE
 WHEN date >= 1500 AND date < 1800 THEN '1500 - 1800'::TEXT
 WHEN date >= 1800 AND date < 1850 THEN '1800 - 1850'::TEXT
 WHEN date >= 1850 AND date < 1875 THEN '1850 - 1875'::TEXT
 ELSE  '1875 - 1900'::TEXT  -- if data between 2000 and 2100 ?
END AS period,
SUM(count)
FROM table1
GROUP BY 1
ORDER BY 1


?
тщательнЕе надо ребята, а тож тоже -- c2h5oh на пару -- и не берёт
сам допишет, чай не голова не опилками набита ))
...
Рейтинг: 0 / 0
31.07.2015, 15:33
    #39020542
HasT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
PCContra
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT 
CASE
 WHEN date >= 1500 AND date < 1800 THEN '1500 - 1800'::TEXT
 ELSE WHEN date >= 1800 AND date < 1850 THEN '1800 - 1850'::TEXT
 ELSE WHEN date >= 1850 AND date < 1875 THEN '1850 - 1875'::TEXT
 ELSE  '1875 - 1900'::TEXT
END AS period,
SUM(count)
FROM table1
GROUP BY 1
ORDER BY 1


?
Спасибо! Запрос подходит, только в нем убрал 'ELSE' (при запуске выдавалась ошибка) и 'ELSE '1875 - 1900'::TEXT'
...
Рейтинг: 0 / 0
31.07.2015, 15:37
    #39020551
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
HasT,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
WITH v AS (SELECT t.* FROM (VALUES 
(1600,	1),
(1609,	1),
(1634,	1),
(1639,	1),
(1744,	1),
(1800,	19),
(1827,	1),
(1830,	1),
(1835,	2),
(1840,	4),
(1845,	1),
(1850,	3),
(1855,	1),
(1860,	4),
(1867,	2),
(1868,	2),
(1869,	2),
(1870,	8),
(1873,	1),
(1875,	1),
(1877,	1),
(1880,	20),
(1881,	1),
(1882,	1),
(1884,	2),
(1885,	3),
(1886,	1),
(1887,	2),
(1888,	2),
(1889,	2),
(1890,	32),
(1891,	4),
(1892,	5),
(1893,	2),
(1894,	3)
 ) AS t (dt, cnt)),
p AS (
  SELECT
    t AS df,
    lead(t) OVER (ORDER BY t) AS dt
  FROM
    unnest('{1500, 1800, 1850, 1875, 1900}'::INTEGER[]) AS t
)
 
SELECT
  concat(p.df, ' - ', p.dt) AS period,
  sum(v.cnt) AS "count"
FROM
  v
  INNER JOIN
  p
  ON v.dt >= p.df AND
     v.dt < p.dt
GROUP BY
  p.df, p.dt
ORDER BY 
  p.df
...
Рейтинг: 0 / 0
31.07.2015, 15:45
    #39020565
HasT
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
Lonepsycho,
спасибо!
...
Рейтинг: 0 / 0
10.09.2015, 14:56
    #39048154
кириллk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
Подскажите пожалуйста, что означает синтаксис "::TEXT" после '1500 - 1800'

'1500 - 1800'::TEXT

Спасибо
...
Рейтинг: 0 / 0
10.09.2015, 22:57
    #39048566
vyegorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений за период
кириллkПодскажите пожалуйста, что означает синтаксис "::TEXT" после '1500 - 1800'

Явное приведение к типу `text` . SQL — строго типизированный язык, PostgreSQL более (по сравнению с ORACLE / MySQL) требователен к типам данных (не всегда автоматом конвертирует).
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сумма значений за период / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]