我在 MS Access 中有一个表,基本上是这样的:
Table Name : Customer_Categories
+----------------------+------------+-------+
| Email | CategoryID | Count |
+----------------------+------------+-------+
| jim@example.com | 10 | 4 |
+----------------------+------------+-------+
| jim@example.com | 2 | 1 |
+----------------------+------------+-------+
| simon@example.com | 5 | 2 |
+----------------------+------------+-------+
| steven@example.com | 10 | 16 |
+----------------------+------------+-------+
| steven@example.com | 5 | 3 |
+----------------------+------------+-------+
此表中有 ≈ 350,000 条记录。特点是这样的:
- Email、CategoryID 和 Count 的值重复
- 计数是指该客户从该类别订购的次数
我想要什么
我想创建一个表,其中包含一个唯一的电子邮件地址以及该客户购买次数最多的类别 ID。
所以上面的例子是:
+----------------------+------------+
| Email | CategoryID |
+----------------------+------------+
| jim@example.com | 10 |
+----------------------+------------+
| simon@example.com | 5 |
+----------------------+------------+
| steven@example.com | 10 |
+----------------------+------------+
我尝试过的
我已经编写了一个实现我想要的查询:
SELECT main.Email, (SELECT TOP 1 CategoryID
FROM Customer_Categories
WHERE main.Email = Email
GROUP BY CategoryID
ORDER BY MAX(Count) DESC, CategoryID ASC) AS Category
FROM Customer_Categories AS main
GROUP BY main.Email;
这很有用,而且完全符合我的要求。它会在大约 8 秒内返回结果。但是我需要在新表中使用此数据,因为我想用类别 ID 更新另一个表。当我在子查询之后添加 INTO Customer_Favourite_Categories
以将此数据添加到新表而不是仅返回结果集并运行查询时,它永远不会完成。我让它运行了大约 45 分钟,但它什么也没做。
有什么办法解决这个问题吗?
最佳答案
如果 select into
不起作用,请使用 insert into
:
create table Customer_Favorite_Categories (
email <email type>,
FavoriteCategory <CategoryId type>
);
insert into Customer_Favorite_Categories
SELECT main.Email, (SELECT TOP 1 CategoryID
FROM Customer_Categories
WHERE main.Email = Email
GROUP BY CategoryID
ORDER BY MAX(Count) DESC, CategoryID ASC) AS Category
FROM Customer_Categories AS main
GROUP BY main.Email;
关于sql - 如何通过查询找到每个客户最喜欢的类别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18080655/