Как объединить несколько подсчетов из разных таблиц в один запрос mysql? - PullRequest
0 голосов
/ 07 мая 2020

У меня есть несколько разных запросов для получения счетчиков. Можно ли объединить эти запросы в один, но не суммировать и объединить счетчики?

Например:

SELECT
  COUNT(uuid) AS total_admins ta,
  SUM(CASE WHEN isPublished = 1 THEN 1 ELSE 0 END) AS total_admins_published tap,
  SUM(CASE WHEN isPublished = 0 THEN 1 ELSE 0 END) AS total_admins_unpublished tau
FROM admins

и

SELECT
  COUNT(uuid) AS total_mediators tm,
  SUM(CASE WHEN isPublished = 1 THEN 1 ELSE 0 END) AS total_mediators_published tmp,
  SUM(CASE WHEN isPublished = 0 THEN 1 ELSE 0 END) AS total_mediators_unpublished tmu
FROM mediator

и

SELECT
  COUNT(uuid) AS total_posts tp,
  SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_week tpw,
  SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_month tpm,
  SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_year tpy
FROM posts

А что жду:

| ta | tap | tau | tm | tmp | tmu | tp  | tpw | tpm | tpy |
|----|-----|-----|----|-----|-----|-----|-----|-----|-----|
| 20 | 10  | 10  | 12 | 10  | 2   | 230 | 30  | 180 | 220 |

1 Ответ

1 голос
/ 07 мая 2020

Вы можете просто CROSS JOIN три запроса:

SELECT ta, tap, tau, tm, tmp, tmu, tp, tpw, tpm, tpy
FROM (
    SELECT
      COUNT(uuid) AS total_admins ta,
      SUM(CASE WHEN isPublished = 1 THEN 1 ELSE 0 END) AS total_admins_published tap,
      SUM(CASE WHEN isPublished = 0 THEN 1 ELSE 0 END) AS total_admins_unpublished tau
    FROM admins
) a
CROSS JOIN (
    SELECT
      COUNT(uuid) AS total_mediators tm,
      SUM(CASE WHEN isPublished = 1 THEN 1 ELSE 0 END) AS total_mediators_published tmp,
      SUM(CASE WHEN isPublished = 0 THEN 1 ELSE 0 END) AS total_mediators_unpublished tmu
    FROM mediator
) m
CROSS JOIN (
    SELECT
      COUNT(uuid) AS total_posts tp,
      SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_week tpw,
      SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_month tpm,
      SUM(CASE WHEN submissionDate BETWEEN "start" AND "end" THEN 1 ELSE 0 END) AS total_posts_year tpy
    FROM posts
) p
...