Массовый запрос из одного запроса с использованием модуля обещания запроса

Вот мои таблицы 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

Использую обещание запроса для кодирования конечной точки /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). Будет ли работать массовый запрос для этого отдельного запроса и как это сделать?

1 ответ

Да, вы можете сделать это в одном запросе

  • сначала выберите user_id из таблицы sp_user по имени пользователя.
  • для этого user_id выберите group_id из sp_usergroup.
  • и посчитать user_id из таблицы sp_usergroup для этих group_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
Другие вопросы по тегам