Sql 按月份分组的每个用户的平均总和

Sql 按月份分组的每个用户的平均总和,sql,Sql,我有3个表1)用户(userId,age)2)购买(purchaseId,userId,itemId,date)3)项目(itemId,price)。目标是编写一个查询,显示每个用户按月份分组的平均购买金额。我目前还不确定是否需要第一张桌子,到目前为止,我有这样的smth: SELECT Purchases.userid, Purchases.date, Purchases.itemId Items.itemId, AVG(SUM(Items.price)) FROM Purchases INN

我有3个表1)用户(userId,age)2)购买(purchaseId,userId,itemId,date)3)项目(itemId,price)。目标是编写一个查询,显示每个用户按月份分组的平均购买金额。我目前还不确定是否需要第一张桌子,到目前为止,我有这样的smth:

SELECT Purchases.userid, Purchases.date, Purchases.itemId Items.itemId, AVG(SUM(Items.price))
FROM Purchases
INNER JOIN Purchases.itemId ON Items.itemId
GROUP BY (somehow group by month)
我被卡住了。请你解释一下,如何写这样一个查询。很抱歉,我没有表的示例,也没有正确的输出示例,因为这是一项测试任务。谢谢

在SQL Server中:

SELECT p.userid, itm.itemId, YEAR(p.date), MONTH(p.date), AVG(itm.price)
FROM Purchases p
INNER JOIN Items itm ON p.itemId = itm.itemId
GROUP BY p.userid, itm.itemId, YEAR(p.date), MONTH(p.date)
你可以试试这个

SELECT Purchases.userid, MONTH(Purchases.date), AVG(Items.price)
FROM Purchases
INNER JOIN Items ON  Purchases.itemId = Items.itemId
GROUP BY Purchases.userid, MONTH(Purchases.date)

按月分组需要将日期放入与该日期相关的年和月的“桶”中。每种数据库类型都有自己独特的功能集,例如

--MS SQL Server
SELECT Purchases.userid, Purchases.itemId, year(Purchases.date), month(Purchases.date), AVG(Items.price)
FROM Purchases
GROUP BY Purchases.userid, Purchases.itemId, year(Purchases.date), month(Purchases.date)

--Oracle
SELECT Purchases.userid, Purchases.itemId, trunc(Purchases.date,'YYYYMM'), AVG(Items.price)
FROM Purchases
GROUP BY Purchases.userid, Purchases.itemId, trunc(Purchases.date,'YYYYMM')

不能使用双重聚合,如
AVG(SUM(Items.price))

因此,您可以作为一个子查询来获取
SUM
,然后使用
AVG

在SQL Server中:

SELECT 
    Purchases.userid, 
    YEAR(Purchases.date), 
    MONTH(Purchases.date), 
    Purchases.itemId 
    Items.itemId, 
    AVG(Items.SumPrice)
FROM
    Purchases 
INNER JOIN
    Users T2 ON Purchases.userId = T2.userId
INNER JOIN 
    (SELECT 
         itemId, SUM(price) AS SumPrice
     FROM  
         Items
     GROUP BY 
         itemId) AS Items ON Items.itemId
GROUP BY  
    Purchases.userid, Purchases.itemId, 
    YEAR(Purchases.date), 
    MONTH(Purchases.date),
    Items.itemId

添加示例数据和预期输出?感谢您的回复!正如我提到的:“很抱歉,我没有表的示例,也没有正确的输出示例,因为这是一项测试任务。”“以某种方式按月分组”是通过使用日期列上的函数来解决的,但是由于您没有确定您使用的数据库(例如MySQL、Oracle、MS SQL Server、Postgres),我们无法建议使用哪个函数。每个数据库都有不同的函数名,但每个数据库都有一个函数返回从任何日期算起的年份和月份。(因此,请选择一个标记,告诉我们您实际需要用于哪个数据库。)@Used_By_ready数据库未指定。这是一项测试任务,所以,我想,我可以使用任何方言。所以,选择一种并将其用作标记。(注:@和用户名之间没有空格)