#sql #oracle #count #union
#sql #Oracle #подсчет #объединение
Вопрос:
Давайте предположим, что у меня две таблицы GOOD
и BAD
, в которых хранятся записи для создания виджетов. Мои таблицы выглядят следующим образом
Widget Good
----------------
Widget A Y
Widget A Y
Widget B Y
Widget Bad
----------------
Widget A Y
Widget B Y
У меня есть эти два основных запроса
select count(*) as good from table_good where widget = 'Widget A' and Good = 'Y'
select count(*) as bad from table_bad where widget = 'Widget A' and Bad = 'Y'
Это привело бы к двум таблицам, подобным этой
good
----
2
bad
---
1
Я хотел бы объединить их в один запрос, где я бы вернул таблицу с одной записью, которая выглядит следующим образом
good bad
-----------
2 1
Может кто-нибудь указать мне, как это сделать. Я думал, что выполнение объединения и настройка поддельных столбцов в других выбранных таблицах сделают это, но я вернул правильную схему таблицы, но у меня было две отдельные записи.
Спасибо!
Комментарии:
1. @Andriy M — Вы были правы, я провел некоторое тестирование, и
GROUP BY
с этим запросом все получилось не так, как я ожидал. Спасибо!
Ответ №1:
Попробуйте это:
SELECT (SELECT COUNT(*) AS good
FROM table_good
WHERE widget = 'Widget A'
AND good = 'Y') AS good,
(SELECT COUNT(*) AS bad
FROM table_bad
WHERE widget = 'Widget A'
AND bad = 'Y') AS bad
FROM dual
Ответ №2:
Другой способ заключается в использовании FULL JOIN
:
SELECT COALESCE(A.widget,B.widget) AS Widget, COUNT(G.*) AS Good, COUNT(B.*) AS Bad
FROM table_good G
FULL OUTER JOIN table_bad B
ON G.widget = B.widget AND A.Good = B.Bad
WHERE (G.widget = 'Widget A' OR B.Widget = 'Widget A')
AND (G.Good = 'Y' OR B.Good = 'Y')