0

这是我用于拆分克隆的 sql 表:

#1) Table name: sp_user
|user_id    |username    
+--------------------

|1          |user1       
|2          |user2       
|3          |user3       
|4          |user4  



#2) Table name: sp_group
|group_id   |groupname   |bill

+--------------------------------

|1          |shopping       |2000

|2          |lunch          |1000    

'movie' 组的费用由用户 - user1、user2 共享,'lunch' 组的费用由用户 - user1、user2、user3、user4 共享。

#3)Table name: sp_usergroup
|group_id   |user_id

+---------------------

|1           |1

|1           |2

|2           |1

|2           |2

|2           |3

|2           |4

我正在使用 request promise 对端点 /user_expense?uname=user1 进行编码,如下所示:

router.route("/user_expense").get(function (req, res) {

  var uname = req.param('name');
  // select query to get the user_id for 'user1' and store it as uid
  .......
  // select query to get the list of group_id for uid

  // set user_exp = 0

    for (i= each of the group_id) {
       // select count(*) for group_id[i] to get the number of users in this group and store it as ct

     // select the bill for group_id[i] and store it as b

    // user_exp += ct / b

   }
   res.send(user_exp);
  }

对于 user1,费用金额应为 1250/- (1000 + 250) 为这个单个请求设置批量查询是否有效,如何做?

4

1 回答 1

0

是的,您可以在单个查询中执行此操作

  • 首先按用户名从 sp_user 表中选择 user_id。
  • 对于此 user_id,请从 sp_usergroup 中选择 group_id。
  • 并从 sp_usergroup 表中计算这些 group_id 的 user_id。
  • 并在 group_id 上加入 sp_group 表和新创建的表
  • 获取 user 的每个 group_id 的平均值。
  • 现在做所有这些平均的总和。你得到user_exp。

您可以像这样在单个 SQL 查询中运行这些 sql 命令。

SELECT SUM(avg) AS user_exp
    FROM  (
        SElECT sp_group.bill/COUNT(sp_usergroup.user_id) AS avg 
        FROM sp_usergroup 
        INNER JOIN sp_group ON sp_usergroup.group_id = sp_group.group_id 
        GROUP BY sp_usergroup.group_id,sp_group.bill 
        HAVING sp_usergroup.group_id IN  (
            SELECT group_id 
            FROM sp_usergroup 
            WHERE user_id= (
                            SELECT user_id 
                            FROM sp_user 
                            WHERE username= 'user1')
        )
    ) AS result
于 2018-02-14T17:44:10.943 回答