Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/65: Рейтинг темы: голосов - 65, средняя оценка - 4.95
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723

Вывод строк, сумма полей который равна значению в переменной

18.10.2017, 16:28. Показов 13557. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый, форумчане.
Навык написания запросов и построения логики утерян, поэтому обращаюсь сюда.
Дано: таблица с полями (id(int), product(nvarchar), price(float), price_id(int)), количество строк в таблице произвольное
Найти: вывести товары, сумма цен которых меньше заданной (@average = sum/3) и присвоить в поле price_id соответствующим строкам значение, например 1
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.10.2017, 16:28
Ответы с готовыми решениями:

Условие в SQL запросе. Сумма двух текстовых полей должна быть равна какой-то строковой переменной
Как сделать условие в SQL запросе, чтобы сумма двух полей была равна какой-то строковой переменной. Вот запрос: ...

Проверить, равна ли сумма цифр числа значению 9
2. С клавиатуры вводится трехзначное число. напишите программу, которая проверяет равна ли сумма его цифр значению 9.

Алгоритм подбора чисел, сумма которых равна определенному значению
Есть число из 11 цифр, сума которых известна и равняется х, какой алгоритм нужен чтобы узнать все возможные вариации чисел, заранее спасибо...

16
5966 / 4542 / 1094
Регистрация: 29.08.2013
Сообщений: 28,151
Записей в блоге: 3
19.10.2017, 09:25
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
вывести товары, сумма цен которых меньше заданной (@average = sum/3)
SQL
1
SELECT * FROM T WHERE price<xxx
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
присвоить в поле price_id соответствующим строкам значение, например 1
SQL
1
2
3
UPDATE T
SET price_id=1
WHERE price<xxx
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
19.10.2017, 10:06  [ТС]
qwertehok, Вы, видимо не поняли. Я писал - вывести строки, сумма цен товаров которых меньше(равно или больше, это уже не так важно) заданной. то есть, имея таблицу:
id товар цена
1 вода 1
2 хлеб 2
3 сыр 5
4 молоко 1
и заданная сумма = 4.5
мне вывело строки 1,2,4
Ваш запрос выведет все цены меньше заданной, а не сумму цен.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
19.10.2017, 10:10
задачу рюкзака решаем?
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
24.10.2017, 15:18  [ТС]
pincet, не совсем понял, о чем Вы.
Но вопрос все еще актуален.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
24.10.2017, 15:28
T-SQL
1
2
3
4
SELECT product, sum_price=SUM(price)
FROM T
GROUP BY product
HAVING SUM(price)<@average;
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
25.10.2017, 12:21  [ТС]
iap, iap, к сожалению, не то. этот результат выводит строки, которые меньше значения переменной @average. если у меня строки с значениями поля price= 1,2,3,4,5,6 и я указываю @average=4, то выводит строки с price =
1,2,3 и т.д. с др значениями переменной.
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
25.10.2017, 15:19
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
iap, iap, к сожалению, не то. этот результат выводит строки, которые меньше значения переменной @average. если у меня строки с значениями поля price= 1,2,3,4,5,6 и я указываю @average=4, то выводит строки с price =
1,2,3 и т.д. с др значениями переменной.
Всё соответствует тексту в стартовом посте.
Опишите задачу на русском языке.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
25.10.2017, 16:38  [ТС]
iap, "вывести товары, сумма цен которых меньше заданной". я просто не знаю, как вкратце объяснить. вроде, и так всё понятно описал)
есть несколько товаров разной цены. мне необходимо найти те первые товары, сумма (1товар+2товар+3товар, например) которых меньше 5 рублей. и вывести те позиции в результате.
было:
товар цена
вода 1
соль 1
сода 2
кофе 3
сахар 5
стало:
товар цена
вода 1
соль 1
сода 2
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
25.10.2017, 17:07
Подсказки:
- в таблице нет "первых", "последних" и т.п. строк
- гуглите что такое "нарастающий итог"
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
25.10.2017, 19:19  [ТС]
invm, первую проблему решить достаточно используя ORDER BY
вторая подсказка, получается, именно то направление, что нужно. попробуем) спасибо за наводку)

Добавлено через 1 час 44 минуты
понял только, что это в несколько строчек не реализовать..)
0
1116 / 761 / 183
Регистрация: 27.11.2009
Сообщений: 2,272
26.10.2017, 13:00
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
понял только, что это в несколько строчек не реализовать..)
Зависит от версии сервера.
Смотрите SUM(...) OVER(PARTITION BY ... ORDER BY ...)
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
31.10.2017, 13:32  [ТС]
тестировал запросы с нарастающим итогом, и столкнулся с проблемой, что счет происходит с первой строки последовательно вниз, независимо от значения в поле price. Что является неверным алгоритмом для подсчета суммы. Рассматривал вариант предварительной сортировки, что не привел к желаемому результату. Может быть, есть смысл включить условия проверки поля price, к примеру, если значение меньше половины значения переменной. Нужна критика и советы) Спасибо
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
31.10.2017, 14:55
Критика и советы возможны, когда есть текст запроса.
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
01.11.2017, 10:07  [ТС]
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE #t(id INT, prod NVARCHAR(500), summa INT, step INT)
 
INSERT #t(id, prod, summa, step) VALUES(1, 'prod1', 1, 0)
INSERT #t(id, prod, summa, step) VALUES(2, 'prod2', 3, 0)
INSERT #t(id, prod, summa, step) VALUES(3, 'prod3', 2, 0)
INSERT #t(id, prod, summa, step) VALUES(4, 'prod4', 2, 0)
INSERT #t(id, prod, summa, step) VALUES(5, 'prod5', 3, 0)
INSERT #t(id, prod, summa, step) VALUES(6, 'prod6', 4, 0)
INSERT #t(id, prod, summa, step) VALUES(7, 'prod7', 1, 0)
 
DECLARE @average INT = 5
SELECT a.summa, a.prod
FROM #t a 
LEFT OUTER JOIN #t b ON b.id < a.id
GROUP BY  a.summa, a.prod
HAVING  (SUM(isnull(b.summa, 0))+MAX(a.summa)) <=@average
в результирующем наборе получаем 1 и 2 строку.
нужен такой алгоритм, где все строки можно разделить на несколько равных долей.
полагаю, нужны циклы?
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
01.11.2017, 11:50
Цитата Сообщение от AndreyVorobey Посмотреть сообщение
нужен такой алгоритм, где все строки можно разделить на несколько равных долей.
Задача меняется на ходу...

Если @average всегда больше max(summa), то, например, можно так:
T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
declare @t table (id int, prod nvarchar(500), summa int, step int);
 
insert into @t (id, prod, summa, step)
values
 (1, 'prod1', 1, 0),
 (2, 'prod2', 3, 0),
 (3, 'prod3', 2, 0),
 (4, 'prod4', 2, 0),
 (5, 'prod5', 3, 0),
 (6, 'prod6', 4, 0),
 (7, 'prod7', 1, 0);
 
declare @average int = 5;
 
select
 id, prod, summa, sum(summa) over (order by id) / @average as piece
from
 @t
order by
 id;
0
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
02.11.2017, 10:49  [ТС]
invm, max(summa) не зависит от @average (может быть как меньше, так и больше).
и попробовал Ваш вариант, но функцию over мой T-SQL видимо не поддерживает. + рабочая часть на SQLite в приложении. в общем... наверное, стоит менять всю концепцию приложения...)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.11.2017, 10:49
Помогаю со студенческими работами здесь

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

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

Выбрать из массива числа, сумма которых равна данному значению
Всем привет. Пытаюсь решить данную задачу, но ничего не выходит. Использую(вернее планирую использовать) рекурсию, ищу банально перебором...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
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