Объединение count (*) с операторами SQL в одну таблицу - PullRequest
0 голосов
/ 06 января 2012

В моей базе данных MySQL есть две таблицы (таблица 1 и таблица 2). Я хочу написать запрос SQL, который выводит некоторую сводную статистику в хорошо отформатированный отчет.

Давайте для примера рассмотрим первый SQL-запрос, который выводит пользователей старше 57 лет из первой таблицы

SELECT count(*) AS OlderThank57
FROM table1
WHERE age >57

И из второй таблицы мы хотим получить количество пользователей женского пола

SELECT count(*) AS FemaleUsers
FROM table2
WHERE gender = "female"

Теперь я хочу получить вывод, подобный следующему

Number of Felame users from table 2: 514
Number of users over the age of 57 from table 1: 918

Каков наилучший способ создания такого отчета?

Ответы [ 4 ]

1 голос
/ 06 января 2012

Я бы предложил расширить один уровень от ответа Адриана ... вернуть в виде двух отдельных полей, чтобы вы могли разместить их отдельно в отчете или выровнять / отформатировать число и т. Д.

SELECT 'Number of Female users from table 2:' as Msg, 
       count(*) as Entries
  FROM table1
  WHERE age >57
UNION ALL
SELECT 'Number of users over the age of 57 from table 1:' as Msg, 
       count(*) as Entries
  FROM table2
  WHERE gender = "female"

Возможно, вам придется заставить оба столбца "Msg" иметь одинаковую длину, иначе можно обрезать их. Опять же, просто еще один вариант ...

1 голос
/ 06 января 2012

Вы всегда можете попробовать директиву WITH ROLLUP при использовании GROUP BY:

SELECT COUNT(*), gender FROM table1 GROUP BY gender WITH ROLLUP

Если вы хотите немного сойти с ума, вы всегда можете сделать серию IF s, которая обрабатываетлогика для одной или нескольких вещей одновременно:

SELECT COUNT(*) IF(gender='female', 'female', IF(age>57, 'older_than_57', '*')) AS switch FROM table1 GROUP BY switch WITH ROLLUP
1 голос
/ 06 января 2012
SELECT CONCAT('Number of users over the age of 57 from table 1:', count(*))
  FROM table1
  WHERE age >57
UNION ALL
SELECT CONCAT('Number of Felame users from table 2: ', count(*))
  FROM table2
  WHERE gender = "female"

У меня нет базы данных mysql для проверки, поэтому вам может потребоваться привести число (*) к строке.

0 голосов
/ 06 января 2012

Объединение - ваш единственный вариант, если у вас нет нормализованной базы данных. Другой вариант - лучше стандартизировать / нормализовать вашу базу данных, чтобы вы могли выполнять гораздо более эффективные запросы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...