如何根据"gender"和" age_group"获得总"income"?收入本身不是列,它是通过查询创建的



我有三个表,我建立了它们之间的关系,但无法得到我想要的。你能帮我解决下面的问题吗?

App_Purchase_001App_Purcase_002App_Purchase_003是采购(收入)

我已将event_name_id列添加到原始产品表中

表格为:

select * from account

有80行

女性男男男女性男
用户id设备id
用户_ 000001设备_00144
用户_ 000002Device_00246女性
用户_ 000003Device_00324
用户_ 000004Device_00447女性
用户_ 000005Device_00529
用户_ 000006设备_00655
用户_ 000007设备_00730女性
用户_ 000008Device_00822
用户_ 000009Device_00945

您可以将数据写入CTE,以使用类似于以下代码的东西在帐户级别聚合收入。我修改了WHERE子句以使用LIKE,而不是列出不同的购买类型,因此您可能需要将其更改为更具体的内容:

;WITH CTEIndividual
AS (
SELECT A.Gender,
COUNT(E.EventName) * P.Price AS Income,
(CASE
WHEN A.Age BETWEEN 0 AND 18 THEN '0-18'
WHEN A.Age BETWEEN 19 AND 24 THEN '19-24'
WHEN A.Age BETWEEN 25 AND 30 THEN '25-30'
WHEN A.Age BETWEEN 31 AND 40 THEN '31-40'
WHEN A.Age BETWEEN 41 AND 55 THEN '41-55'
END
) AS age_group
FROM #TempAccount AS A
INNER JOIN #TempEvent AS E ON E.UserID = A.UserID AND E.DeviceID = A.DeviceID
INNER JOIN #TempProduct AS P ON E.EventName = P.EventNameID
WHERE E.EventName LIKE 'App_Purchase%'
GROUP BY (CASE
WHEN A.Age BETWEEN 0 AND 18 THEN '0-18'
WHEN A.Age BETWEEN 19 AND 24 THEN '19-24'
WHEN A.Age BETWEEN 25 AND 30 THEN '25-30'
WHEN A.Age BETWEEN 31 AND 40 THEN '31-40'
WHEN A.Age BETWEEN 41 AND 55 THEN '41-55'
END
),
A.Gender,
P.Price
)

然后你可以用这样的东西来总结这一切:

SELECT C.Gender,
SUM(C.Income) AS Income,
C.age_group
FROM CTEIndividual AS C
GROUP BY C.Gender,
C.age_group
ORDER BY C.Gender DESC,
C.age_group;

最新更新