Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.10.2016, 10:05   #1
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 34
По умолчанию Получить таблицу «диапазон-сумма»

Пока не хватает квалификации на решение следующей задачи. Она мне – чайнику в SQL – казалось классической и общезначимой. Однако найти в сети не могу. Видимо вопрос – и тот неправильно задаю Подскажите ссылку (на исчерпывающий ответ не претендую, но буду рад).
И так задача:
В большой таблице есть поле «Стоимость». Есть несколько диапазонов, границы которых определены (например так: 0, 1000, 3000, 10000, 30000, …). Нужно за один проход по таблице получить таблицу «диапазон-сумма», т.е. сумма стоимостей по диапазонам: S(от >=0 И < 1000), S(от >=1000 И < 3000), …
Разумеется за несколько проходов (по числу диапазонов) я сделал все мгновенно, а вот оптимизация на один проход по таблице не получается А таблица большая.
(Если честно, то мне стыдно... Есть подозрение, что я просто искать разучился. Не ругайтесь пожалуйста )
Я не волшебник - я только учусь.

Последний раз редактировалось armati lepori; 14.10.2016 в 10:07. Причина: орфография
armati lepori вне форума Ответить с цитированием
Старый 14.10.2016, 10:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
SELECT
    SUM(CASE WHEN Стоимость<1000 THEN Стоимость ELSE 0 END) AS d1000,
    SUM(CASE WHEN Стоимость>=1000 AND Стоимость<3000 THEN Стоимость ELSE 0 END) AS d3000,
    ...
  FROM MyTable
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.10.2016, 10:24   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

MS SQL (там есть case) для других "диалектов" (СУБД) возможно потребуется другое имя функции
Код:
select 
SUM (case when стоимость between 0 and 1000 стоимость else 0) as d1000,
SUM (case when стоимость between 1001 and 2000 стоимость else 0) as d2000,
SUM (case when стоимость between 2001 and 3000 стоимость else 0) as d3000,
.........
SUM (case when стоимость >100000 стоимость else 0) as dover

from ...
P.S. и имена полей одинаковые.
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 14.10.2016, 10:26   #4
armati lepori
Пользователь
 
Аватар для armati lepori
 
Регистрация: 23.09.2016
Сообщений: 34
По умолчанию

Спасибо!
Я правильно квалифицировал себя как "чайник", но ни минуты не сомневался, в возможности решения этой задачи
Я не волшебник - я только учусь.
armati lepori вне форума Ответить с цитированием
Старый 14.10.2016, 10:29   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

C between чуть лучше конечно, только аккуратней с границами интервалов - они включающие. Особенно если стоимость не целое
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наработки С++ (сумма ряда и диапазон значений) ЛенаОвсянникова Помощь студентам 3 24.09.2013 20:52
Как получить диапазон ячеек отвечающих условию Arassir Microsoft Office Excel 2 09.10.2011 16:32
Получить таблицу с сайта Иллидан Общие вопросы Delphi 9 29.09.2010 21:49
VBA Преобразовать в диапазон таблицу king13 Microsoft Office Excel 4 16.10.2009 11:08
Сумма за переменный диапазон maxxBez Microsoft Office Excel 2 05.11.2008 10:00