[英]SQL - query by dynamic weights
我有一个数据库,用户有一个项目列表。
设计简单:
用户:
UserStuff | 用户身份
ItemsList:
itemID | 用户身份
每个用户都有一个项目列表。 一个Item可以属于许多用户(相同的itemID,不同的userID)。
现在我想动态地给项目赋予权重(在运行时计算,而不是可以存储在数据库中的常量),然后根据项目选择权重最高的用户。
我可以给SQL查询中的项目赋予权重,然后进行计算吗?
我试图避免循环数据库并计算用户的权重。
编辑:
例:
UserStuff | 用户身份
blah1 | 1
blah2 | 2
itemID | 用户身份
1 | 1
1 | 2
2 | 1
3 | 1
4 | 2
5 | 1
wieghts:
itemId = 1 = 15 itemID = 2 = 10
UserID1总重量= 25
UserID2总重量= 10
使用动态值创建一个临时权重表:
CREATE TEMPORARY TABLE weights(item_id integer, weight integer);
CREATE TABLE
INSERT INTO weights VALUES (1, 10); -- Inserting weights
INSERT 0 1
INSERT INTO weights VALUES (2, 1); -- Inserting weights
INSERT 0 1
...
创建一个视图以将项目映射到权重:
CREATE TEMPORARY VIEW items_weights AS
SELECT il.itemID, il.UserID, w.weight FROM
ItemsList il JOIN weights w
ON il.itemID=w.item_id;
选择加权最高的用户:
SELECT UserId, COUNT(weight) FROM items_weights
GROUP BY UserId ORDER BY COUNT(weight) DESC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.