【问题标题】:Bulk query from a single request using request promise module使用请求承诺模块从单个请求批量查询
【发布时间】:2018-07-24 14:13:07
【问题描述】:

这是我用于拆分克隆的 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    

“电影”组的费用由用户分摊 - 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);
  }

对于用户 1,费用金额应为 1250/- (1000 + 250) 为这个单一请求设置批量查询是否有效以及如何操作?

【问题讨论】:

    标签: node.js postgresql request-promise hasura


    【解决方案1】:

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

    • 首先通过用户名从sp_user表中选择user_id。
    • 为此 user_id 从 sp_usergroup 中选择 group_id。
    • 并从 sp_usergroup 表中计算这些 group_id 的 user_id。
    • 并加入 sp_group 表和 group_id 上新创建的表
    • 获取用户每个 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
    

    【讨论】:

    • 如果您使用 hasura 服务,那么您可以使用数据 api 运行此 sql 查询。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2017-02-22
    • 1970-01-01
    • 2012-12-09
    • 2023-03-16
    相关资源
    最近更新 更多