Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
1

функция СУМ

26.02.2013, 09:46. Показов 1392. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, уважаемые форумчане. Я новичок SQL, возник вопрос по использованию функции SUM. Есть два столбца: Прогноз, Результат. Необходимо вывести следующий запрос:

Три столбца, все должны быть упорядочены по восрастанию третьего столбца

Резульат, Прогноз, Упорядочивание по возрастанию(Прогноз / SUM (Прогноз))

Запутался с оператором group by, в результате получается какая-то ерунда
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.02.2013, 09:46
Ответы с готовыми решениями:

Расчет контрольных сум
Имеются 2 файла txt. Нужно получить контрольные суммы строк этих файлов, и сравнить их между собой....

Вычисление сум рекурсией
делала лабу по вычислению сумм http://gnd.ucoz.ru/46gre.jpg но программа при нажатии на...

Сумма сум факториалов
Здравствуйте! Нужно создать функцию подсчета суммы сум факториала, как-то так, задания есть на 4...

значения заданых сум
Задан действительны x и массив Y (n), n <= 200. Разработать программу вычисления значения заданных...

11
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 10:35 2
Можно так.
SQL
1
2
3
4
5
6
7
SELECT Результат, Прогноз, Ratio
FROM 
(
   SELECT Результат, Прогноз, Прогноз/ (SELECT SUM (Прогноз) FROM TABLE) AS Ratio
 
) temp1 
ORDER BY Ratio
Добавлено через 7 минут
поправка


SQL
1
2
3
4
5
6
FROM 
(
   SELECT ....
   FROM TABLE
 
) temp1
0
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
26.02.2013, 10:55  [ТС] 3
Попробовал конструкцию, ругается на скобку

T-SQL
1
2
3
4
5
6
7
8
SELECT code, forecast1, Ratio
FROM 
(
   SELECT [code], [forecast1], [forecast1]/(SELECT SUM (forecast1)) 
   FROM [Slim4].[slim4].dbo.Article)
 
) temp1 
ORDER BY Ratio
Msg 102, Level 15, State 1, Line 7
Incorrect syntax near ')'.
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 11:01 4
SQL
1
2
3
4
5
6
7
SELECT Результат, Прогноз, Ratio
FROM 
(
   SELECT Результат, Прогноз, Прогноз/ (SELECT SUM (Прогноз) FROM dbo.Article) AS Ratio
   FROM dbo.Article
) temp1 
ORDER BY Ratio
Если тип forecast1 целый то лучше сделать CAST

SQL
1
CAST (Прогноз AS [DECIMAL] (18,3) )/ (SELECT SUM (Прогноз) FROM dbo.Article) AS Ratio
1
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
26.02.2013, 11:23  [ТС] 5
А что делает функционал temp1?
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 11:35 6
Это просто имя таблицы, которую sql сформировал вложенным запросом. Можете заменить его на что угодно, но имя здесь должно быть.
0
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
26.02.2013, 11:41  [ТС] 7
SELECT code, warehouse, forecast1, Ratio
FROM
(
SELECT code, warehouse, forecast1, forecast1/(SELECT SUM (forecast1) FROM dbo.Article WHERE [warehouse] = '20663-') AS Ratio
FROM dbo.Article
) temp1
ORDER BY Ratio


Не подскажете, почему в этой конструкции не срабатывает WHERE [warehouse] = '20663-')?
Специально завел столбец warehouse чтобы отслеживать, что пишет.

Добавлено через 1 минуту
Цитата Сообщение от Remmor Посмотреть сообщение
Это просто имя таблицы, которую sql сформировал вложенным запросом. Можете заменить его на что угодно, но имя здесь должно быть.
Просто для временного сохранения в буфер?

Добавлено через 2 минуты
Блин, не там поставил критерий отбора. Уже понял. Спасибо!
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 11:48 8
Цитата Сообщение от Lelik83 Посмотреть сообщение
Просто для временного сохранения в буфер?
Просто потому что оно должно быть. Видимо считают что синтаксис так схож.
SQL
1
2
3
4
5
6
7
8
9
SELECT *
FROM dbo.Article
LEFT JOIN dbo.Product
WHERE ... 
--
SELECT *
FROM (...)AAA
LEFT JOIN (...) PPP
WHERE ...
Добавлено через 1 минуту
Цитата Сообщение от Lelik83 Посмотреть сообщение
Не подскажете, почему в этой конструкции не срабатывает WHERE [warehouse] = '20663-')?
Вообще все правильно, а какую ошибку выдает? И еще стоит следить за делением на ноль.
1
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
26.02.2013, 12:51  [ТС] 9
Сейчас конструкция вроде заработала. Я наверное несколько наглею, но позволю вам задать еще один вопрос, может подскажете...

Формирую столбец ABC, которы принимает значения
С для элементов Ratio от 1 до round(0.05*count(Ratio))
B для элементов Ratio от round(0.05*count(Ratio))+1 до round(0.15*count(Ratio))
A для элементов Ratio от round(0.15*count(Ratio))+1 до count(Ratio)

то есть столбец Ratio делится на три группы 5%, 15% и 80%

Думаю использовать конструкцию case

case
when Then
End

Не пойму как сравнивать количества значений, а не сами значения Ratio
Вот как бы мне на номера элементов столбца перейти.
If number(Ratio)>... to A и т.д.

Добавлено через 19 минут
Наверное что-то типа LEN(colmn)

Добавлено через 19 минут
Решил не пользоваться индексами и использовать значения столбца и по ним вести ранжирование. Новоял такую конструкцию

T-SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT code, warehouse, forecast1, resultantBufferStock, Ratio, ABC
FROM 
(
   SELECT code, warehouse, forecast1, resultantBufferStock, 
        forecast1/(SELECT SUM (forecast1) FROM dbo.Article WHERE [warehouse] = '20663-') AS Ratio,
        
        CASE
            WHEN    Ratio < 0.05*MAX(Ratio) THEN 'C'
            WHEN    Ratio >= 0.05*MAX(Ratio) AND Ratio < 0.15*MAX(Ratio) THEN 'B'
            WHEN    Ratio >= 0.80*MAX(Ratio) THEN 'A'
        END AS ABC  
        
        
   FROM dbo.Article
) temp1 WHERE [warehouse] = '20663-'
--ORDER BY Ratio
Знаю, что неправильно использую MAX(Ratio), так как функция агрегатная. Но вот как правильно ее прописать...
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 12:57 10
Цитата Сообщение от Lelik83 Посмотреть сообщение
Не пойму как сравнивать количества значений,
Я тоже не пойму вопрос. Что с чем хотите сравнивать?

Добавлено через 5 минут
1. Ratio во вложенном селекте не существует, его можно использовать только во внешнем запросе.
2. MAX(Ratio) - Это максимальный Ratio?
Кликните здесь для просмотра всего текста
Вообще логика мне подсказывает, что тут что то не то с логикой. Поясните лучше, что это за категории ABC, какая смысловая нагрузка на них?
0
5 / 5 / 1
Регистрация: 11.02.2013
Сообщений: 238
26.02.2013, 13:03  [ТС] 11
Да, MAX(Ratio) - это максимальный Ratio

Логика такая: в зависимости от значений Ratio в столбец ABC писать A, B или С

Как пропсиать значение MAX(Ratio) чтобы я мог его использовать в запросе как обычный параметр, включать в сравнения и т.п...
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
26.02.2013, 13:16 12
ну ясно, если нет задачи все решить в один селект, то можно сделать темповую таблицу, получить макс из нее и использовать ее для дальнейшей выборки.
ну по типу:
SQL
1
2
3
4
DECLARE @TempTable TABLE (parm1 INT NOT NULL, ...)
INSERT INTO @TempTable SELECT ...
DECLARE @MaxRatio INT = (SELECT MAX (RATIO) FROM @TempTable  )
...
Добавлено через 3 минуты
Но можно запихнуть и в один но работать должно хуже:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT 
code
, warehouse
, forecast1
, resultantBufferStock
, Ratio
,CASE
            WHEN    Ratio < 0.05*(SELECT MAX(Ratio) FROM temp1)   THEN 'C'
            WHEN    Ratio >= 0.05*(SELECT MAX(Ratio) FROM temp1) AND Ratio < 0.15*MAX(Ratio) THEN 'B'
            WHEN    Ratio >= 0.80*(SELECT MAX(Ratio) FROM temp1) THEN 'A'
        END AS ABC  
FROM (
SELECT code, warehouse, forecast1, resultantBufferStock, Ratio
FROM 
(
   SELECT code, warehouse, forecast1, resultantBufferStock, 
        forecast1/(SELECT SUM (forecast1) FROM dbo.Article WHERE [warehouse] = '20663-') AS Ratio,     
       
        
        
   FROM dbo.Article
) temp1 WHERE [warehouse] = '20663-'
) temp2
1
26.02.2013, 13:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.02.2013, 13:16
Помогаю со студенческими работами здесь

Описать функцию СУМ(А), вычисляющую величину x(1)x(n)+x(2)x(n-1)+…+x(n)x(i)
const n=… m=…; type матрица = array of real; Описать функцию СУМ(А), вычисляющую величину...

скласти програму для обчислення скінченних сум
скласти програму для обчислення скінченних сум а і добутків b вибравши функцію F(x)=2.574*x...

Найти сум¬му и произведение элементов K-й строки матрицы.
Matrix1. Дана матрица размера M х N и целое число K (1 &lt; K &lt; M). Найти сум¬му и произведение...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru