SQL-запрос с использованием таблиц, групп по и где - PullRequest
1 голос
/ 21 марта 2019

Вопрос: Какие заказы имеют значение больше 5000 долларов?

Запрос, который я сейчас использую:

SELECT o.orderNumber, o.orderDate, d.quantityOrdered*d.priceEach AS totalAmt
FROM orderdetails d, orders o, products p 
WHERE p.productCode = d.productCode 
    AND d.orderNumber = o.orderNumber;

Вывод выглядит так:

'10100','2003-01-06 00:00:00','4080'
'10100','2003-01-06 00:00:00','2754.5'
'10100','2003-01-06 00:00:00','1660.12'
'10100','2003-01-06 00:00:00','1729.21'
'10101','2003-01-09 00:00:00','2701.5'
'10101','2003-01-09 00:00:00','4343.56'
'10101','2003-01-09 00:00:00','1463.8500000000001'
'10101','2003-01-09 00:00:00','2040.1000000000001'

Как выможно видеть, что для каждого заказа заказано несколько товаров, поэтому, например, мне нужен запрос, чтобы объединить все итоговые суммы для заказа 10101, чтобы сравнить его с большим или равным 5000.

Ответы [ 5 ]

1 голос
/ 22 марта 2019

Вам действительно нужна таблица продуктов для этого? в любом случае, используйте SUM () с группой GROUP BY, и HAVING получит нужный вам результат.

SELECT
    o.orderNumber,
    o.orderDate,
    SUM(d.quantityOrdered * d.priceEach) AS totalAmt
FROM
    orderdetails d,
    orders o,
    products p
WHERE
    p.productCode = d.productCode
AND d.orderNumber = o.orderNumber
GROUP BY
    o.orderNumber
HAVING
    totalAmt >= 5000;

Вывод будет примерно таким.

    '10100' 2003-01-06 00:00:00 10223.83
    '10101' 2003-01-09 00:00:00 10549.01
1 голос
/ 22 марта 2019

Вам необходимо будет суммировать сумму заказа с помощью функции SUM () и функции GROUP BY (). Так будет:

SELECT
    o.orderNumber,
    o.orderDate,
    SUM(d.quantityOrdered * d.priceEach) AS totalAmt
FROM
    orderdetails d,
    orders o,
    products p
WHERE
    p.productCode = d.productCode
AND d.orderNumber = o.orderNumber
GROUP BY
    o.orderNumber,
    o.orderDate
HAVING
    SUM(d.quantityOrdered * d.priceEach) >= 5000;

Стоит отметить одну вещь: объединение таблицы «продукты» необходимо, если вы хотите только суммировать стоимость продукта для продукта, который существует в таблице «продукты».

1 голос
/ 21 марта 2019

Я не вижу, как таблица products необходима в этом запросе.Присоединитесь к таблицам orders и orderdetails и сложите сумму за quantityOrdered*priceEach:

SELECT 
  o.orderNumber, 
  o.orderDate, 
  SUM(d.quantityOrdered*d.priceEach) totalamt
FROM orders o INNER JOIN orderdetails d
ON d.orderNumber = o.orderNumber
GROUP BY
  o.orderNumber, 
  o.orderDate
HAVING totalamt > 5000
0 голосов
/ 21 марта 2019

Во-первых, вам не нужна таблица products в вашем объединении, потому что ни один столбец из этой таблицы не участвует в выбранной проекции, а для объединения записей вам нужно сгруппировать их по orderNumber и orderDate и агрегироватьостальные столбцы с помощью функции MAX, которая в вашем случае равна d.quantityOrdered * d.priceEach:

SELECT o.orderNumber, o.orderDate, MAX(d.quantityOrdered * d.priceEach) AS totalAmt
FROM orderdetails d, orders o
WHERE d.orderNumber = o.orderNumber
GROUP BY o.orderNumber, o.orderDate
HAVING MAX(d.quantityOrdered * d.priceEach) > 5000
0 голосов
/ 21 марта 2019

а.Используйте [group by] в подзапросе, а затем фильтруйте в родительском запросе b.Используйте с

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