Как подсчитать строки во вложенных таблицах одним SQL-запросом? - PullRequest
0 голосов
/ 05 февраля 2019

У меня есть три таблицы.Каждый User может иметь несколько Subscriptions, а каждый Subscription может иметь несколько Payments.

Моя цель состоит в том, чтобы подсчитать все Payments для одного User, используя один SQL-запрос.Можно ли это сделать и как?

В приведенном ниже случае результат для User с id 1 должен быть 2 (поскольку User имеет два Payments)

Users
+----+------+
| Id | Name |
+----+------+
| 1  | John |
+----+------+

Subscriptions
+----+--------+-----------+
| Id | userId |   data    |
+----+--------+-----------+
| 1  |   1    | some data |
+----+--------+-----------+
| 2  |   1    | some data |
+----+--------+-----------+

Payments

+----+----------------+--------+
| Id | subscriptionId | amount |
+----+----------------+--------+
| 1  |        1       |   30   |
+----+----------------+--------+
|  2 |        2       |   50   |
+----+----------------+--------+

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Вы можете попробовать сделать что-то вроде этого:

SELECT COUNT(p.Id) AS PaymentCount
FROM Users u
  LEFT JOIN Subscriptions s ON u.Id=s.userId
  LEFT JOIN Payments p ON s.id=p.subscriptionId
WHERE u.Id = @yourUserID

Обратите внимание на COUNT(p.Id) - это означает количество существующих платежей.

PS: этот ответ для @ Kickstart.

0 голосов
/ 05 февраля 2019

попробуйте, как показано ниже, используя объединение и агрегирование

SELECT u.id, u.Name, COUNT(p.id) AS numberofpayment
FROM users u
  Left JOIN Subscriptions s ON u.Id=s.userId
  Left JOIN Payments p ON s.id=p.subscriptionId
GROUP BY u.id, u.Name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...