我想创建一个基于ID和产品类型的指标。我的数据:
Year ID Purchase_Category
2020 1 Kitchen
2020 2 Home
2020 2 Kitchen
2020 3 Home
2021 1 Home
2021 2 Kitchen
2021 3 Kitchen
如果具有相同ID的人在2020年购买了厨房,然后在2021年购买了家,反之亦然,那么他们被认为是整体的。在这种情况下,id2不是整体的,因为家庭和厨房是在同一年购买的。输出应该如下所示:
ID Indicator
1 Holistic
2 Not Holistic
3 Holistic
可以这样做:
SELECT ID, CASE COUNT(*) WHEN 1 THEN 'Not Holistic' ELSE 'Holistic' END AS INDICATOR
FROM (SELECT ID, YEAR, COUNT(*) FROM DATA GROUP BY ID, YEAR)
GROUP BY ID
首先,确定每个ID的不同年份,然后从该集合中,如果ID只出现一次,则所有产品都是在同一年购买的,否则有不同年份购买的产品。
您只需要对每个ID
的Year
列进行不同的计数。不需要两步
select ID,
case when count(distinct "Year") > 1
then 'Holistic' else 'Not Holistic' end as Indicator
from T
group by ID
也可以这么说:
case when max("Year") > min("Year") then ...
我不知道哪一个看起来更自然。如果你有大量的数据,第二种方法可能更快。