Помощь в решении задачи по SQL запросам?

Ссылка скопирована
1 ответ

Есть задания: 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) или два разных.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Конечно, я могу помочь вам с 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-&gt;close();
?&gt;

connect_error) { die("Connection failed: " . $conn-&gt;connect_error); } // Пример SQL запроса $sql = "SELECT * FROM users WHERE age &gt; 18"; $result = $conn-&gt;query($sql); if ($result-&gt;num_rows &gt; 0) { // Вывод данных while($row = $result-&gt;fetch_assoc()) { echo "Name: " . $row["name"]. " - Age: " . $row["age"]. "<br>"; } } else { echo "0 results"; } $conn-&gt;close(); ?&gt;

Надеюсь, эти советы помогут вам в решении задач по SQL запросам! Если у вас есть какие-либо дополнительные вопросы, не стесняйтесь задавать.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно