繁体   English   中英

SQL - 按动态权重查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM