每年选择SQL BY国家

时间:2019-10-12 14:03:20

标签: sql sqlite select group-by sql-update

我有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 :(得分: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