Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231

Группировка по количеству строк

29.11.2016, 19:04. Показов 5156. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сгруппировать данные по кол-ву строк.

Т.е. мне необходимо сгруппировать каждые ХХХ следующих записей.

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

row1: totals for rows 1..99
row2: totals for rows 100..199
row3: totals for rows 200..299

и т.д. до ....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.11.2016, 19:04
Ответы с готовыми решениями:

Группировка строк в таблице
Здравствуйте, совсем недавно начал работать с Microsoft SQL Server 2008, в частности создание там баз данных. Возник вопрос по поводу...

Группировка городов по количеству жителей
Вам дан список столиц стран с указанным населением. Сгруппируйте города, попадающие в интервалы по 100.000 жителей и выведите на экран...

Вывод записей из БД и группировка по количеству
Доброго времени суток! Никогда не работал с оператором COUNT но сейчас пришлось. И я честно говоря не знаю с какой стороны зайти даже....

10
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
29.11.2016, 20:04
Лучший ответ Сообщение было отмечено tvv1 как решение

Решение

Без критерия упорядочивания строк, понятия "следующая строка" и "предыдущая строка" неприменимы.

Добавлено через 53 минуты
А вообще, принцип следующий:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
with a as
(
 select
  (row_number() over (order by SomeCriterion) - 1) / 100 as g,
  SomeField
 from
  MyTable
)
select
 g, sum(SomeField)
from
 a
group by
 g
order by
 g;
1
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
29.11.2016, 22:53  [ТС]
Цитата Сообщение от invm Посмотреть сообщение
row_number() over (order by SomeCriterion) - 1) / 100 as g,
спасибо за оперативный ответ.
буду в эту сторону ковырять, немного пробел в понимании с этим over'ом.

Добавлено через 1 час 54 минуты
Навроди как разобрался - предложенный вариант то что надо.

Вот хотел бы еще прояснить, можно ли WITH использовать как набор данных для FROM
т.е. как аналог вложенных SELECT * FROM (SELECT * FROM tbl) AS src, только вместо вложения WITH.

Мне нужно после первого прохода сделать еще
SQL
1
SUM(Total) OVER(ORDER BY g ROWS BETWEEN g PRECEDING) AS "Sum_Total"
SQL
1
2
3
4
5
6
7
8
9
10
11
WITH src_tbl AS 
(SELECT (ROW_NUMBER() OVER (ORDER BY [ModifiedDate] DESC) - 1) / 1000 AS g,
    p.*
    FROM [AdventureWorks2014].[Person].[Person] p)
SELECT  
        g
    ,   COUNT(g) AS "Count"
    ,   SUM(src_tbl.BusinessEntityID) AS "Total"        
FROM src_tbl
GROUP BY g 
ORDER BY g
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
29.11.2016, 22:59
Цитата Сообщение от tvv1 Посмотреть сообщение
Вот хотел бы еще прояснить, можно ли WITH использовать как набор данных для FROM
Можно.
WITH можно считать синтаксическим сахаром для derived tables ("вложенных select" в вашей терминологии).
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
29.11.2016, 23:15  [ТС]
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT *
FROM (
    WITH src_tbl AS 
    (SELECT (ROW_NUMBER() OVER (ORDER BY [ModifiedDate] DESC) - 1) / 1000 AS g,
        p.*
      FROM [AdventureWorks2014].[Person].[Person] p)
    SELECT  
            g
        ,   COUNT(g) AS "Count"
        ,   SUM(src_tbl.BusinessEntityID) AS "Total"
        --, SUM(src_tbl.BusinessEntityID) OVER(order by g) sum
    FROM src_tbl
    GROUP BY g ) data_src
ORDER BY g
у меня такое не срастается, поэтому и задал вопрос выше.
; - перед WITH тоже не помагает.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
29.11.2016, 23:26
tvv1,
T-SQL
1
2
3
4
5
6
7
8
with src_tbl as
(
 ...
)
select
 ...
from
 src_tbl;
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
29.11.2016, 23:57  [ТС]
invm,
а еще раз это обернуть это в SELECT ?

Добавлено через 20 минут
обошел следующим образом:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
WITH src_tbl AS
(
 ...
)
SELECT
 ...
INTO #tmp FROM
 src_tbl;
 
SELECT
   ....
   SUM() OVER()
FROM #tmp
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
30.11.2016, 00:08
Цитата Сообщение от tvv1 Посмотреть сообщение
а еще раз это обернуть это в SELECT ?
Зачем?
T-SQL
1
2
3
4
5
6
7
8
WITH src_tbl AS
(
 ...
)
SELECT
   ....
   SUM() OVER()
FROM src_tbl
0
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
30.11.2016, 00:20  [ТС]
Цитата Сообщение от invm Посмотреть сообщение
Зачем?
1. нужно получить агрегащию по каждым 100 записям. для этого раздел Select ... SUM () as Total from cte group by g; уже занят
2. затем после первой агрегации нужно получить еще одну колонку с агрегацией, так что бы в ней была сумма (sum_total) всех предудущих записей в поле Total

g; Total; Sum_Total
1; 10; 10
2; 20; 30
3; 10; 40
4; 15; 55
5; 5; 60
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
30.11.2016, 00:31
Лучший ответ Сообщение было отмечено tvv1 как решение

Решение

Цитата Сообщение от tvv1 Посмотреть сообщение
затем после первой агрегации нужно получить еще одну колонку с агрегацией, так что бы в ней была сумма (sum_total) всех предудущих записей в поле Total
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
with a as
(
 select
  (row_number() over (order by SomeCriterion) - 1) / 100 as g,
  SomeField
 from
  MyTable
),
b as
(
 select
  g, sum(SomeField) as s
 from
  a
 group by
  g
)
select
 g, s, sum(s) over (order by g)
from
 b
order by
 g;
Или еще проще
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
with a as
(
 select
  (row_number() over (order by SomeCriterion) - 1) / 100 as g,
  SomeField
 from
  MyTable
)
select
 g, sum(SomeField), sum(sum(SomeField)) over (order by g)
from
 a
group by
 g
order by
 g;
1
80 / 73 / 25
Регистрация: 26.10.2010
Сообщений: 231
30.11.2016, 00:39  [ТС]
Цитата Сообщение от invm Посмотреть сообщение
Или еще проще
постом выше так и пытался сделать (строку закоментил в коде), только не мог победить SUM OVER
ситуацию спасло SUM(SUM) OVER - не смог додуматься ))))
Цитата Сообщение от invm Посмотреть сообщение
sum(sum(SomeField)) over (order by g)
ПС.
ух ты, во второй СТЕ можно использовать первое СТЕ как источник- вообще прикольно !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2016, 00:39
Помогаю со студенческими работами здесь

По некоторому количеству строк (не более N) найти пары строк с общим словом
По некоторому количеству строк (не более N) найти пары строк с общим словом. помогите, пожалуйста. слишком быстро перескочили и со...

Создать матрицу количество строк которой равно количеству строк файла
Здравствуйте. Хочу из файла считать данные построчно. Считаю количество строк и создаю двумерный массив ifstream fin; ...

Группировка строк
Добрый день! Помогите с макросом,который бы группировал строки...групп должно быть несколько,в столбце А есть например ячейки с именем...

Группировка строк в dgv
Доброго времени суток. Имеется таблица в бд приблизительно следующего вида: а 1 2 а 2 4 б 1 2 б 2 2 Не получается привести к...

Группировка строк по дате
Всем доброго дня! Появилась проблема, с которой бьюсь уже не один день... Есть MYSQL, с него забираю данные, обрабатываю, далее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru