powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сумма значений за период
10 сообщений из 10, страница 1 из 1
Сумма значений за период
    #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
Сумма значений за период
    #39020432
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HasT,

sum() и group by
...
Рейтинг: 0 / 0
Сумма значений за период
    #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
Сумма значений за период
    #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
Сумма значений за период
    #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
Сумма значений за период
    #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
Сумма значений за период
    #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
Сумма значений за период
    #39020565
HasT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lonepsycho,
спасибо!
...
Рейтинг: 0 / 0
Сумма значений за период
    #39048154
кириллk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, что означает синтаксис "::TEXT" после '1500 - 1800'

'1500 - 1800'::TEXT

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

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


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