выбирайте каждый год страну SQL BY - PullRequest
0 голосов
/ 12 октября 2019

У меня есть 3 таблицы, как показано ниже:

Таблица клиентов: список клиентов с их именами и фамилиями, полный адрес.0

Таблица Продукт: список статей, отправленных навеб-сайт, содержащий название статьи, страну, в которой она была изготовлена, и ее цену.

Таблица Действия: список всех транзакций, совершенных клиентами за время транзакций.

  CREATE TABLE Client(Id_client integer PRIMARY KEY, First_Name varchar, Last_Name varchar);
  CREATE TABLE Produit (id_produit varchar PRIMARY KEY, Country varchar, Article_Name varchar, Price varchar);
  CREATE TABLE Transactions (Id_client varchar, id_produit varchar, date_t varchar);

Требуемый вывод

получить среднюю цену первой статьи, приобретаемой всеми пользователями в Японии за каждый год.

1 Ответ

0 голосов
/ 12 октября 2019

Вот решение, которое использует оконные функции во внутреннем запросе для ранжирования транзакций каждого клиента и каждого года;затем внешний запрос фильтрует предыдущую транзакцию в каждой группе и использует агрегирование для вычисления среднего значения продукта.

Допущения:

  • ваша СУБД поддерживает оконные функции
  • date_t - это тип данных типа даты
  • ваша СУБД поддерживает функцию YEAR()

Запрос:

SELECT 
    year_date,
    AVG(price) avg_price
FROM (
    SELECT 
        YEAR(date_t) year_date,
        p.price,
        ROW_NUMBER() OVER(PARTITION BY YEAR(t.date_t), t.id_client ORDER BY p.date_t) rn
    FROM Transactions t
    INNER JOIN Produit p ON t.id_produit = p.id_produit 
    WHERE p.country = 'Japan'
) x
WHERE rn = 1
GROUP BY year_date
...