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

Теперь я получаю результат о двух запросах, но я хочу объединить с двумя результатами

Первый запрос

select count(*) from ih;

Это результат

count(*)
'200000'

Второй запрос

select
GROUP_CONCAT(if(rating='01', cnt, NULL)) AS 'A',  
GROUP_CONCAT(if(rating='02', cnt, NULL)) AS 'B',
GROUP_CONCAT(if(rating='03', cnt, NULL)) AS 'C',
GROUP_CONCAT(if(rating='04', cnt, NULL)) AS 'D',
GROUP_CONCAT(if(rating='05', cnt, NULL)) AS 'E'
from
(
select rating, count(1) cnt from de.rec ri group by 
(rating)
) a;

Это результат

  A, B, C, D, E
'1222', '2851', '4638', '4325', '29206'

Но я хочу получить такой результат

count(*), A, B, C, D, E
'200000', '1222', '2851', '4638', '4325', '29206'

Так что, если кто-то знает, как это происходит, научите меня

Ответы [ 2 ]

2 голосов
/ 21 января 2020

Вы можете просто поставить свой выбор рядом друг с другом

select
(select count(*) from ih),
GROUP_CONCAT(if(rating='01', cnt, NULL)) AS 'A',  
GROUP_CONCAT(if(rating='02', cnt, NULL)) AS 'B',
GROUP_CONCAT(if(rating='03', cnt, NULL)) AS 'C',
GROUP_CONCAT(if(rating='04', cnt, NULL)) AS 'D',
GROUP_CONCAT(if(rating='05', cnt, NULL)) AS 'E'
from
(
select rating, count(1) cnt from de.rec ri group by 
(rating)
) a;
0 голосов
/ 21 января 2020

Один метод использует cross join:

select max(ih.cnt),
       GROUP_CONCAT(if(rating='01', cnt, NULL)) AS A,  
       GROUP_CONCAT(if(rating='02', cnt, NULL)) AS B,
       GROUP_CONCAT(if(rating='03', cnt, NULL)) AS C,
       GROUP_CONCAT(if(rating='04', cnt, NULL)) AS D,
       GROUP_CONCAT(if(rating='05', cnt, NULL)) AS E
from (select rating, count(*) as cnt
      from de.rec ri
      group by rating
     ) ri cross join
     (select count(*) as cnt from ih) ih;

Я думаю, ваш запрос может быть упрощен, хотя:

select max(ih.cnt),
       sum(rating = '01') as A,
       sum(rating = '02') as B,
       sum(rating = '03') as C,
       sum(rating = '04') as D,
       sum(rating = '05') as E
from de.rec ri cross join
     (select count(*) as cnt from ih) ih;

Примечания:

  • Do не используйте одинарные кавычки для псевдонимов столбцов. Используйте их для констант строки и даты. Использование их для идентификаторов в дальнейшем вызовет у вас проблемы, когда у вас появятся непредвиденные ошибки, потому что идентификатор выглядит как строка для компилятора.
  • Нет необходимости делать две конкатенации. Одного достаточно.
  • Я рекомендую CASE выражений над IF(), поскольку первое стандартное SQL доступно во всех базах данных.
  • Использование GROUP_CONCAT() здесь вполне вводит в заблуждение, потому что есть только одно значение. Все, что он делает, это конвертирует счет в строку, что не кажется полезным.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...