Я использовал SQL sum groupby, почему это общая сумма, а не сумма по группам?

#sql #sum

Вопрос:

пример

 CREATE TABLE book(  title VARCHAR(100) PRIMARY KEY,   price INT NOT NULL )  CREATE TABLE buyer(  name VARCHAR(20) ,  title VARCHAR(100),  primary key(name,title),  foreign key(title)  references book )  

Я опущу код для ввода данных

 book data = {('a',100),('b',200),('c',100),('d',300)} buyer data = {('kim','a'),('kim','b'),('ca','c'),('yan','d'),('yan','c')}  select name, sum(price) sum_price from book,buyer group by name  

Я хочу знать общее количество по имени

но этот результат — сумма всех книг.

Я не знаю, в чем проблема

Комментарии:

1. Совет сегодняшнего дня: Переключитесь на современный, явный JOIN синтаксис. Легче писать ( без ошибок ), легче читать (и поддерживать), и легче конвертировать во внешнее соединение, если это необходимо.

2. book, buyer это то же CROSS JOIN самое, что . Просто проверьте результат с SELECT * без GROUP BY предложения

Ответ №1:

Соединение двух таблиц без условия соединения создает полное декартово произведение двух таблиц.

Попробуйте это, должно решить вашу проблему.

 select name, sum(price) sum_price from buyer br left join book bk on br.title=bk.title group by name  

Ответ №2:

Это связано с тем, что вы не выполнили правильное соединение, и в результате вы получили перекрестное соединение, что означает, что каждая строка book таблицы будет соединена с каждой строкой buyer таблицы. Попробуйте либо добавить where инструкцию с правильным соединением 2 таблиц, либо использовать join синтаксис в from части.

Комментарии:

1. перекрестное соединение, а не полное внешнее соединение.

2. да, ты прав @jarlh!