qwe qwe Ответов: 1

[Запрос Mysql]заказы, которые имеют более 1 продукта


Привет
Это моя база данных

Экран таблиц

Мне нужно показать
1) заказы, которые имеют более 1 продукта

2) Список проданных количеств для каждого продукта

Что я уже пробовал:

1)я написал что-то вроде этого, но это неправильно

SELECT orders.Number_ord FROM orders join products USING(Number_ord) GROUP BY COUNT(Number_prod)>1


2)Здесь у меня тоже есть проблема

SELECT count(products.Number_prod),sum(products.Qty) FROM orders join products USING(Number_ord) GROUP BY Number_prod



Пожалуйста, помогите мне

1 Ответов

Рейтинг:
4

CHill60

Предложение № 1: Не размещайте ссылки на фотографии ваших столов. Просто покажите данные здесь - например:

Number_ord	Buyer	Delivery_address	Date
1		Martin	Chicago			2018-12-16
2		John	Berlin			2018-12-17
3		Martin	Chicago			2018-12-18
Или, что еще лучше, дайте нам некоторый SQL, который мы можем скопировать, чтобы создать образец данных для себя - например:
create table #orders (number_ord int identity(1,1), Buyer varchar(50), Delivery_address varchar(50), [Date] Date)
insert into #orders values('Martin','Chicago','2018-12-16'),('John','Berlin','2018-12-17'), ('Martin','Chicago','2018-12-18')

create table #products (number_prod int, number_ord int, Qty int)
insert into #products values (469841,1,15),(469841,2,15),(999999,2,6),
(558585,2,45),(469841,3,15),(844444,3,80)
Предложение № 2 - Не пишите "но это неправильно" или "у меня тоже есть проблема" - дайте нам подробности каких-либо сообщений об ошибках или объяснить, как результаты неверны

Сказав все это, вот некоторая помощь с вашей проблемой, но сначала некоторые предостережения: мое решение находится в стандартном T-SQL и поэтому может нуждаться в настройке для MySQL (извините, я не могу получить доступ SQLFiddle.com на данный момент). Я также не могу создавать таблицы в базе данных, к которой у меня сейчас есть доступ, поэтому я использовал временные таблицы - вам нужно будет удалить их. # знаки, чтобы заставить его работать на вас.

Проблема № 1 - перечислите заказы, которые имеют более 1 продукта

На самом деле для этого вам не нужны никакие объединения, вам просто нужно сгруппировать их по соответствующему столбцу в таблице Products, например
SELECT #products.Number_Ord, count(*) as cnt from #products group by #products.Number_Ord having count(*) > 1
что дает довольно голые результаты...
Number_Ord	cnt
2		3
3		2
Чтобы получить более значимую информацию, вы можете использовать это как вложенный запрос[^] например
select #orders.Number_ord, #orders.Buyer, #orders.Delivery_address, #orders.Date, counts.cnt
from #orders
INNER JOIN (SELECT #products.Number_Ord, count(*) as cnt from #products group by #products.Number_Ord having count(*) > 1) as counts on #orders.Number_Ord=counts.Number_Ord
что дает несколько более приятные результаты ...
Number_Ord	Buyer	Delivery_address	Date		cnt
2		John	Berlin			2018-12-17	3
3		Martin	Chicago			2018-12-18	2
Задача № 2 - Список проданных количеств для каждого продукта

Если вы посмотрите на код, который у вас уже есть, обратите внимание, что вы вообще не ссылаетесь ни на что из таблицы заказов, поэтому избавьтесь от этого соединения, чтобы дать вам
SELECT count(#products.Number_prod),sum(#products.Qty) FROM #products GROUP BY Number_prod
Теперь это даст вам следующие результаты:
3	45
1	45
1	80
1	6
Хм... не совсем то, что вам нужно - у вас есть правильные цифры, но как сказать, какой номер идет с каким продуктом? Снимите крышку count из вашего запроса (я также убираю идентификатор таблицы/псевдоним, так как это не обязательно)
SELECT Number_prod,sum(Qty) FROM #products GROUP BY Number_prod
что дает вам
469841	45
558585	45
844444	80
999999	6
Вот ссылка на документацию по этому вопросу ГРУППА ПО[^] - Похоже, тебе нужно освежить тему разговора