我正在尝试为每组数据调用一个过程。例如,我有一个客户列表和他们喜欢的电影功能。是一对多的关系,我在数据集中有一个特定客户的许多记录。因此,我要做的是为每个特定客户应用聚类算法。需要一些关于我应该在 SQL 上应用什么语句的帮助。
先感谢您!
我正在尝试为每组数据调用一个过程。例如,我有一个客户列表和他们喜欢的电影功能。是一对多的关系,我在数据集中有一个特定客户的许多记录。因此,我要做的是为每个特定客户应用聚类算法。需要一些关于我应该在 SQL 上应用什么语句的帮助。
先感谢您!
我不确定我是否得到您的问题,但没有足够的声誉发表评论。因此,我将做出一些假设,并根据我的理解做出最好的回答。
例如使用 SQLite(这是不同方言中最简单的变体之一),让我们假设您的数据是通过以下方式创建的:
CREATE TABLE "Customer" (
id INTEGER NOT NULL,
name VARCHAR(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE (id)
);
CREATE TABLE "Movie" (
id INTEGER NOT NULL,
customer INTEGER NOT NULL,
movie VARCHAR(64) NOT NULL,
PRIMARY KEY (id),
UNIQUE (id),
FOREIGN KEY(customer) REFERENCES "Customer" (id)
);
让我们填充一些数据:
INSERT INTO Movie (id, customer, movie) VALUES(0, 0, 'Rambo');
INSERT INTO Movie (id, customer, movie) VALUES(1, 0, 'Rocky');
INSERT INTO Movie (id, customer, movie) VALUES(2, 1, 'Mamma Mia');
INSERT INTO Movie (id, customer, movie) VALUES(3, 1, 'Grease');
INSERT INTO Movie (id, customer, movie) VALUES(4, 0, 'Terminator');
只要您对应用一些聚合函数感到满意,您就可以像这样使用单个 SELECT:
SELECT
customer, MAX(id),
COUNT(DISTINCT id), AVG(LENGTH(movie)), SUM(LENGTH(movie))
FROM Movie GROUP BY customer;
如果您需要从 Customer 表中获取数据,您可能需要像这样进行连接:
SELECT
Customer.name, Customer.id, MAX(Movie.id),
COUNT(DISTINCT Movie.id), AVG(LENGTH(Movie.movie)), SUM(LENGTH(Movie.movie))
FROM Movie
JOIN Customer on Movie.customer=Customer.id
GROUP BY customer;
如果你想做 k-means,SQLite 是相当有限的,但使用其他方言你仍然可以做到。有关示例,请参见本文。在 Internet 上可以很容易地找到PostgreSQL、MySQL、SQL Server中的示例......你可以用谷歌搜索你的。
大多数其他 SQL 方言将具有一组更丰富的预定义函数。对于更复杂的分析,您可能需要定义自己的函数,并可能使用 SQL 中的结果。