Как добавить другой результат запроса, который я сделал, в результат (SQL)

#mysql #sql

#mysql #sql

Вопрос:

Привет, у меня проблема с этим, это было бы просто для вас, но я не мог узнать, как исправить мой код из-за моего плохого английского:((

Вот запрос, который я сделал

 SELECT  
  ESCC,
  count(if(DRC =156, DRC,NULL)) AS 'A',
  count(if(DRC =159, DRC,NULL)) AS 'B',
  count(if(DRC =160, DRC,NULL)) AS 'C'
FROM diag_results WHERE diagOrder=1 GROUP BY ESCC;
  

Приведенный выше запрос выдает следующий результат.

  ------ ---- ---- ---- 
| ESCC | A  | B  | C  |
 ------ ---- ---- ---- 
|    1 | 32 | 21 | 92 |
 ------ ---- ---- ---- 
|    2 | 21 | 33 | 52 |
 ------ ---- ---- ---- 
...
  

Но я хотел бы добавить еще один результат приведенного ниже запроса к приведенному выше результату в виде столбцов

 SELECT  
  count(if(DRC =156, DRC,NULL)) AS 'D',
  count(if(DRC =159, DRC,NULL)) AS 'E',
  count(if(DRC =160, DRC,NULL)) AS 'F'
FROM diag_results WHERE diagOrder=2 GROUP BY ESCC;
  

в результате этого

  ---- ---- ---- 
| D  | E  | F  |
 ---- ---- ---- 
| 32 | 21 | 92 |
 ---- ---- ---- 
| 21 | 33 | 52 |
 ---- ---- ---- 
...
  

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

  ------ ---- ---- ---- ---- ---- ---- 
| ESCC | A  | B  | C  | D  | E  | F  |
 ------ ---- ---- ---- ---- ---- ---- 
|    1 | 32 | 21 | 92 | 32 | 21 | 92 |
 ------ ---- ---- ---- ---- ---- ---- 
|    2 | 21 | 33 | 52 | 21 | 33 | 52 |
 ------ ---- ---- ---- ---- ---- ---- 
  

пожалуйста, ответьте мне

Комментарии:

1. вам нужны разные идентификаторы для diagOrder ?

2. если записей нет, вы хотите NULL или 0?

3. @ysth ahh Мне лучше переключить null на 0. Спасибо 🙂

Ответ №1:

Вам не нужно count(if()) делать то, что вы хотите. Его намного проще использовать sum() , как в:

 SELECT ESCC,
       sum(diagOrder = 1 and DRC = 156) AS A,
       sum(diagOrder = 1 and DRC = 159) AS B,
       sum(diagOrder = 1 and DRC = 160) AS C,
       sum(diagOrder = 2 and DRC = 156) AS D,
       sum(diagOrder = 2 and DRC = 159) AS E,
       sum(diagOrder = 2 and DRC = 160) AS F
FROM diag_results
WHERE diagOrder IN (1, 2) 
GROUP BY ESCC;
  

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

Ответ №2:

 SELECT  
  ESCC,
  count(if(diagOrder = 1 AND DRC =156, DRC,NULL)) AS 'A',
  count(if(diagOrder = 1 AND DRC =159, DRC,NULL)) AS 'B',
  count(if(diagOrder = 1 AND DRC =160, DRC,NULL)) AS 'C',
  count(if(diagOrder = 2 AND DRC =156, DRC,NULL)) AS 'D',
  count(if(diagOrder = 2 AND DRC =159, DRC,NULL)) AS 'E',
  count(if(diagOrder = 2 AND DRC =160, DRC,NULL)) AS 'F'
FROM diag_results WHERE diagOrder IN (1, 2) 
GROUP BY ESCC;