-2

我有 3 个如下表:

表客户:客户名单及其名字和姓氏,完整地址。0

Table Produit:网站上发送的文章列表,包含文章名称、制造国家和价格。

表操作:客户端完成的所有事务的列表以及事务的时间。

  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);

所需输出

获取日本所有用户每年购买的第一篇文章的平均价格。

4

1 回答 1

0

这是一个在内部查询中使用窗口函数对每个客户和每年的交易进行排名的解决方案;然后,外部查询过滤每个组中较早的交易,并使用聚合来计算产品的平均值。

假设:

  • 您的 RDBMS 支持窗口函数
  • date_t是类似日期的数据类型
  • 您的 RDBMS 支持该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
于 2019-10-12T14:26:11.697 回答