Помощь в решении задачи по SQL запросам?
Есть задания: https://i.imgur.com/h1X72Fo.png
Помогите, пожалуйста, решить 2.а задание.
Я совсем юный падаван, пытаюсь на заданиях учится. Простые задания понятны и уже опробовал, но чуть сложнее и все, затык.
Это наброски, понимаю что скорее всего это абракадабра, но пока так:
select CUSTOMER.customer_key, CUSTOMER.age, PURCHASE.customer_key, PURCHASE.product_key, PURCHASE.date, PRODUCT.name, PRODUCT.product_key FROM PRODUCT JOIN PURCHASE on (PRODUCT.product_key = PURCHASE.product_key and product.name = 'плюшевый мишка') FROM PURCHASE JOIN CUSTOMER on CUSTOMER.customer_key = PURCHASE.customer_key where product.name = 'плюшевый мишка'; where purchase.date = '2018' (тут нужно вроде интервал) //WHERE `time_stamp` BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59'// SELECT AVG(AGE) AS avg_age FROM CUSTOMER; |
select CUSTOMER.customer_key, CUSTOMER.age, PURCHASE.customer_key, PURCHASE.product_key, PURCHASE.date, PRODUCT.name, PRODUCT.product_key FROM PRODUCT JOIN PURCHASE on (PRODUCT.product_key = PURCHASE.product_key and product.name = 'плюшевый мишка') FROM PURCHASE JOIN CUSTOMER on CUSTOMER.customer_key = PURCHASE.customer_key where product.name = 'плюшевый мишка'; where purchase.date = '2018' (тут нужно вроде интервал) //WHERE `time_stamp` BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 23:59:59'// SELECT AVG(AGE) AS avg_age FROM CUSTOMER;
Дополнительно:
SELECT AVG(`age`) FROM `CUSTOMER` WHERE `CUSTOMER_KEY` IN ( SELECT `CUSTOMER_KEY` FROM `PURCHACE` WHERE `PRODUCT_KEY` IN ( SELECT `PRODUCT_KEY` FROM `PRODUCT` WHERE `NAME` = 'плюшевый мишка' ) AND `DATE` BETWEEN '2018-01-01' AND '2018-12-31' ) |
SELECT AVG(`age`) FROM `CUSTOMER` WHERE `CUSTOMER_KEY` IN ( SELECT `CUSTOMER_KEY` FROM `PURCHACE` WHERE `PRODUCT_KEY` IN ( SELECT `PRODUCT_KEY` FROM `PRODUCT` WHERE `NAME` = 'плюшевый мишка' ) AND `DATE` BETWEEN '2018-01-01' AND '2018-12-31' )
Если хотите с JOIN'ами, то
SELECT AVG(`age`) FROM ( SELECT DISTINCT `c`.`CUSTOMER_KEY`, `c`.`AGE` AS `age` FROM `PRODUCT` AS `p` JOIN `PURCHACE` AS `pu` ON `p`.`NAME` = 'плюшевый мишка' AND `pu`.`DATE` BETWEEN '2018-01-01' AND '2018-12-31' AND `pu`.`PRODUCT_KEY` = `p`.`PRODUCT_KEY` JOIN `CUSTOMER` AS `c` ON `c`.`CUSTOMER_KEY` = `pu`.`CUSTOMER_KEY` ) AS `t` |
SELECT AVG(`age`) FROM ( SELECT DISTINCT `c`.`CUSTOMER_KEY`, `c`.`AGE` AS `age` FROM `PRODUCT` AS `p` JOIN `PURCHACE` AS `pu` ON `p`.`NAME` = 'плюшевый мишка' AND `pu`.`DATE` BETWEEN '2018-01-01' AND '2018-12-31' AND `pu`.`PRODUCT_KEY` = `p`.`PRODUCT_KEY` JOIN `CUSTOMER` AS `c` ON `c`.`CUSTOMER_KEY` = `pu`.`CUSTOMER_KEY` ) AS `t`
- Уважаемый Rsa97, спасибо.
А можете посмотреть мой ответ на 2.b:
SELECT `fio`
FROM `CUSTOMER`
WHERE `CUSTOMER_KEY` IN (
SELECT `CUSTOMER_KEY`
FROM `PURCHACE`
WHERE `PRODUCT_KEY` IN (
SELECT `PRODUCT_KEY`
FROM `PRODUCT`
WHERE `NAME` = 'плюшевый мишка' AND 'набор lego'
) AND `DATE` BETWEEN '2019-04-01' AND '2019-04-30'
) - ummik, WHERE `NAME` = 'плюшевый мишка' AND `NAME` 'набор lego'
- ummik, Задумайтесь, может ли имя товара одновременно быть 'плюшевый мишка' и 'набор lego'
- Rsa97, нет, не может. OR же!
- ummik, Сам по себе OR тоже не поможет.
Тут либо отдельный JOIN по каждому товару, либо OR и COUNT(), чтобы посчитать количество разных товаров. - Rsa97, проверил только сейчас - с OR работает и первая Ваша и вторая моя адаптированная. Я просто создал таблицы и поля наполнил минимально разными данными и проверял все вручную меняя разные данные. Может в рамках какой-то реальной базы данных, которая должна пополнятся каким-то образом - будут свои нюансы.
- Rsa97, я видимо не понял вашего ответа, можете перефразировать? почему просто OR не пойдет, хотя вроде (у меня мало опыта!) я протестировал варианты некоторые (например 1 пользователь сделал 2 заказа за указанный период, но его не учитывает при просчете avg(age) или дублей при выводе ФИО.).
просите, я просто совсем новичок и могу очевидного не замечать.
- ummik, Потому что OR покажет, в том числе, и клиентов, купивших только один товар, а вам надо только купивших оба.
В задаче есть неоднозначность. Непонятно, если клиент купил сразу два товара, будет ли это один заказ (записи с одним PURCHACE_KEY) или два разных.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Конечно, я могу помочь вам с SQL запросами! SQL (Structured Query Language) - это язык программирования, который используется для работы с базами данных. Вот несколько советов, которые могут помочь вам в решении задач по SQL запросам:
1. Понимайте структуру базы данных: Прежде чем писать SQL запросы, важно понимать структуру базы данных, включая таблицы, столбцы, отношения между таблицами и т. д. Это поможет вам правильно сформулировать запросы.
2. Используйте правильные операторы: В SQL есть различные операторы, такие как SELECT, INSERT, UPDATE, DELETE и т. д. Убедитесь, что вы используете правильный оператор для вашей задачи.
3. Используйте условия WHERE: Условие WHERE позволяет фильтровать данные в вашем запросе. Например, вы можете использовать условие WHERE для выборки данных только из определенной таблицы или для фильтрации данных по определенному критерию.
4. Используйте функции агрегирования: Функции агрегирования, такие как COUNT, SUM, AVG и т. д., позволяют выполнять вычисления на группе данных. Они могут быть полезны при анализе данных или создании отчетов.
5. Используйте JOIN для объединения таблиц: Оператор JOIN позволяет объединять данные из нескольких таблиц. Существуют различные типы JOIN, такие как INNER JOIN, LEFT JOIN, RIGHT JOIN и т. д. Убедитесь, что вы выбираете подходящий тип JOIN для вашей задачи.
Пример использования SQL запроса на языке PHP:
connect_error) { die("Connection failed: " . $conn->connect_error); } // Пример SQL запроса $sql = "SELECT * FROM users WHERE age > 18"; $result = $conn->query($sql); if ($result->num_rows > 0) { // Вывод данных while($row = $result->fetch_assoc()) { echo "Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>"; } } else { echo "0 results"; } $conn->close(); ?>
Надеюсь, эти советы помогут вам в решении задач по SQL запросам! Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь задавать.