#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;