写SQL查询来计算产品
这里有一个表有三列:USER_ID,PRODUCT_ID,等级,写SQL查询来计算产品
这是表:
user_id product_id rating
u0 p0 3
u0 p1 2
u1 p0 1
u1 p1 4
u2 p0 2
u2 p1 3
如果两个额定两个不同的客户相同的两个产品,然后计算他们的收视率的点积如下: U0和U1两者额定产品P0和P1,结果应该是:3 * 1 + 2 * 4 = 11
和结果表:
u0 u1 3*1+2*4=11
u0 u2 3*2+2*3=12
u1 u2 1*2+4*3=14
如何编写查询来获取它?
MySQL的解决方案:
SELECT SUM(m.product_rating)
FROM (
SELECT EXP(SUM(LOG(COALESCE(rating,1))) AS product_rating
FROM table
GROUP BY product_id
/*this query multiplies the ratings by product*/
) AS m
GROUP BY NULL
编辑:
如果你想只有某些产品,在内部查询添加
WHERE product_id IN('p0', 'p1', ...)
。 如果您只想要某些用户,请在外部查询中添加
WHERE user_id IN('u0', 'u1', ...)
。
请不要回答不清楚的问题。它只是提出了很差的问题,差劲的答案和长时间的讨论评论&downvote&close投票,直到他们清楚。你没有代表,不这样做。 – philipxy
预期结果的前两列是没有意义的 - 如果有多个用户呢?
所以,忽略了一点......
SELECT ROUND(SUM(subtotal)) total
FROM
(SELECT product_id
, EXP(SUM(LOG(rating))) subtotal
FROM my_table
GROUP
BY product_id
) n;
Sqlfiddle的一样:http://sqlfiddle.com/#!9/3c9dac/3
哦,这是早期的答案几乎如出一辙。因为它是首先发布的,如果你有意接受这个,请接受它。
你们都在mysql中写过,是否可以在t-sql中写入? – roastedpotato
不知道tsql,我不能说。 – Strawberry
T-SQL/SQL服务器
DECLARE @DataSource TABLE
(
[user_id] VARCHAR(2)
,[product_id] VARCHAR(2)
,[rating] DECIMAL(9,2)
);
INSERT INTO @DataSource ([user_id], [product_id], [rating])
VALUES ('u0', 'p0', 3)
,('u0', 'p1', 2)
,('u1', 'p0', 1)
,('u1', 'p1', 4);
WITH DataSource AS
(
SELECT [product_id]
,EXP(SUM(LOG([rating]))) AS [value]
FROM @DataSource
GROUP BY [product_id]
)
SELECT SUM([value])
FROM DataSource;
选择的MySQL和SQL-服务器这两者是不同的任何一个。 –
@roastedpotato:是否有任何附加条件,如限制某些用户/产品?另外,你真的需要第一和第二列有user_ids吗? –
你不清楚。你没有解释。什么是输入作为什么是输入的函数? (为什么是示例输入的输出?如果有其他用户和产品,那么这两个产品又是什么?)另外,你有什么尝试?请阅读并在[mcve]上采取行动。 – philipxy