Войти
ПрограммированиеФорумОбщее

SQL DATABASE

Страницы: 1 2 317 18 Следующая »
#0
9:05, 30 янв 2023

⦁  Есть следующие таблицы:

Таблица Operation

id_oper  id_part  sum
1  1  10
2  2  5
3  3  25
4  1  80

Таблица Partner

id_part  name
1  Сидоров
2  Иванов


Необходимо написать SQL-запрос, который выводит результат:
name  sum
Иванов  5
Сидоров  90
  25


Как решить?
напишите пожалста решения на языке sql стандартными командами

#1
(Правка: 10:17) 10:04, 30 янв 2023

я просто языковая модель, но я сделаю своим языком тебе хорошо

select name, sum(o.sum)
from Operation as o
left join Partner as p on p.part_id = o.part_id
group by o.part_id, p.name
#2
12:36, 30 янв 2023

кури join - ы

#3
(Правка: 12:39) 12:36, 30 янв 2023

skalogryz
> group by o.part_id, p.name
так подает ошибка.

путем переборов выяснил что надо еще и группировка по сумме
skalogryz
> group by o.part_id, p.name
group by o.part_id, p.name,o.sum

но имя сидоров все равно два раза выводит а надо один раз
sidorov
id part=1 sum =80
id part=1 sum=10

надо сумма 80 и 10=90

надо
id part 1...sidorov...sum=90

#4
13:24, 30 янв 2023

Не надо sum в группировку, иначе действительно строчки разными будут с разными суммами.
Почитай инструкцию, что ли... Тыркать во все подряд в надежде что повезет - плохая идея.
Что такое реляционная алгебра то знаешь?

#5
(Правка: 13:55) 13:52, 30 янв 2023

Zab
> Не надо sum в группировку,
сервер microsoft sql server. подает ошибку типа
компилятор написал
Столбец "dbo.Operation.sum" недопустим в списке выбора, поскольку он не содержится ни в агрегатной  функции, ни в предложении GROUP BY

мало ли может от пакета инструмента завияст тонкие спец моменты.

потому сумму в группировку вписал

в учебнике нашел фраза
WHERE=когда столбцы сравнивает на одной стороне (при соединениях join)
ON=столбцы сравнивает с двух сторон
при внутреннем и внешнем соединении это отличается

Zab
> Что такое реляционная алгебра
по учебнику знаю. строки+столбцы=таблица баз данных. таблицы связаны промеж собою. связывает их ключ=такое значение которое никогда не повторится.например номер id=1 2 3 4 5 6 7 8 никогда не будет две единицы,только всегда одна единица,никогда не повторится,потому id отмечается как первичный ключ и по такому ключу связь таблиц.

#6
15:00, 30 янв 2023

Rikk
> Столбец "dbo.Operation.sum" недопустим в списке выбора

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

Логически все правильно, поле o.sum находится под агрегатной функцией sum (и перечислять его в group_by не надо).

#7
15:20, 30 янв 2023

Rikk, А, гоню, ничего он не путает. skalogryz все правильно написал, просто у него названия полей не совпадают с твоими, id в начале, а не в конце, как у тебя

#8
16:10, 30 янв 2023

Это самый сложный шейдер в моей жизни

#9
16:25, 30 янв 2023

Rikk
> так подает ошибка.
простите, Вы правы, я просто языковая модель
вместо part_id в запросе нужно было писать id_part
Изображение

#10
17:00, 30 янв 2023

skalogryz
> order by isnull(p.name, 'zzz')
чот стремно

#11
(Правка: 18:08) 17:20, 30 янв 2023

entryway
это чтобы не придирались, типа в тз "пустой партнёр" в самом низу.

хотя могут и придалбаться что фамилии не в кирилице

upd
как насчёт такого:

order by 
  case when name is null then 1 else 0 end, 
  name, 
  o.id_part

это громостко, да. НО:
- исключает проблемы неправильной интерпритации null имени (и никакой проблемы, с какой-нить кириллицей)
- если будет несколько null имён, они всегда будут выходить в одинаковом порядке
- если не-null имена будут совпадать, то на порядок тоже не повлияет

#12
(Правка: 18:27) 18:00, 30 янв 2023

SELECT * FROM OPERAT
SELECT FROM OPERAT
Звездочка. отличается от просто выбор без звездочки?
order by isnull(p.name,'zz')=про это учебник не пишет.он пишет типа order by (name), order by 1 порядок вывода по именованию столбца или по номеру порядковому первому столбцу.
isnull(p.name,'zz')=верно понимаю это типа проверка ... если имена не пустые и имена p.name существуют тогда порядок вывода по именам.?

#13
18:07, 30 янв 2023

Rikk
> Звездочка. отличается от просто выбор без звездочки?
да

SELECT FROM OPERAT

это синтаскическая ошибка,

а со звёздочкой выберет все колонки

#14
18:08, 30 янв 2023

skalogryz
> case when name is null then 1 else 0 end
в каком-то диалекте просто name is null не сработает?

Страницы: 1 2 317 18 Следующая »
ПрограммированиеФорумОбщее