Код ошибки 1111: недопустимое использование групповой функции sql - PullRequest
0 голосов
/ 31 марта 2020

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

create view location_costs as 
select
City as location, 
participant_item.SederStaple as item, 
sum(ItemAmount) as quantity,
item.ItemPrice*sum(ItemAmount) as price
from participant_item
inner join item 
on participant_item.SederStaple=item.SederStaple
group by item, location
order by location;

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

create view location_costs as 
select
City as location, 
participant_item.SederStaple as item, 
sum(ItemAmount) as quant,
sum(item.ItemPrice*sum(ItemAmount)) as price
from participant_item
inner join item 
on participant_item.SederStaple=item.SederStaple
group by item, location
order by location;

, и он больше не работает:

код ошибки 1111, недопустимое использование групповой функции sql

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Не помещайте сумму в сумму:

select
  pi.City as location, 
  pi.SederStaple as item, 
  sum(pi.ItemAmount) as quant,
  sum(i.ItemPrice * pi.ItemAmount) as price
from 
  participant_item pi
  inner join item i on pi.SederStaple = i.SederStaple
group by pi.City, pi.SederStaple
order by location;

Приведя в порядок ваш псевдоним, я догадался, с какого стола эти вещи появились (я полагал, что у объекта не будет города или количество, но участник будет) - вам может понадобиться немного настроить вещи. Всегда полностью псевдоним ваших запросов. Это останавливает их таинственный сбой, если в будущем кто-то добавит еще один столбец к таблице с таким же именем

Кроме того, в то время как MySQL весьма рад использовать псевдонимы (местоположение, элемент) в своей группе, другими базами данных нет; сохраните исходные имена для вашей группы, чтобы при следующем задании использовать SQL сервер. Вы не заметили эту mysql -только «особенность»

0 голосов
/ 31 марта 2020

Я думаю, вам нужно умножение до sum():

select City as location, pi.SederStaple as item, 
       sum(ItemAmount) as quantity,
       sum(ItemAmount * i.ItemPrice) as price
from participant_item pi inner join
     item i
     on pi.SederStaple = i.SederStaple
group by item, location
order by location;

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

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