Посчитайте все, когда индикатор Y - PullRequest
0 голосов
/ 17 января 2020

У меня есть две таблицы.

Таблица: список штатов / округов всех штатов, маленький пример ниже.

State  Countyid CountyName
 KY     101      Jefferson
 KY     102      Clark
 KY     103      Henderson
 IN     501      Albany
 ON     601      Franklin

вторая таблица - это таблица ресурсов

PK_Rescid    state  Nationwide
  64892        KY      Y
  64857        OH      N
  58745        OH      N

Я хочу посчитать количество ресурсов в состоянии. Это также означало бы, что, когда общенациональный показатель равен «Y», тогда это число должно применяться ко всем штатам.

Не уверен, как это можно сделать sh. Подсчет ресурсов для определения достаточно прост, но добавление дополнительных критериев усложняет задачу.

Ответы [ 2 ]

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

LEFT OUTER JOIN DISTINCT состояния (для каждой страны) для ресурсов, а затем GROUP BY каждого состояния и COUNT количества ресурсов.

Oracle Настройка :

CREATE TABLE state_counties ( State, Countyid, CountyName ) AS
SELECT 'KY', 101, 'Jefferson' FROM DUAL UNION ALL
SELECT 'KY', 102, 'Clark' FROM DUAL UNION ALL
SELECT 'KY', 103, 'Henderson' FROM DUAL UNION ALL
SELECT 'IN', 501, 'Albany' FROM DUAL UNION ALL
SELECT 'ON', 601, 'Franklin' FROM DUAL;

CREATE TABLE state_resources (PK_Rescid, state, Nationwide ) AS
SELECT 64892, 'KY', 'Y' FROM DUAL UNION ALL
SELECT 64857, 'ON', 'N' FROM DUAL UNION ALL
SELECT 58745, 'ON', 'N' FROM DUAL

Запрос :

SELECT s.state,
       COUNT(r.pk_rescid)
FROM   ( SELECT DISTINCT state FROM state_counties ) s
       LEFT OUTER JOIN
       state_resources r
       ON ( r.nationwide = 'Y' OR s.state = r.state )
GROUP BY s.state;

Выход :

STATE | COUNT(R.PK_RESCID)
:---- | -----------------:
ON    |                  3
IN    |                  1
KY    |                  1

дБ <> скрипка здесь

0 голосов
/ 17 января 2020

Предполагая, что pk_rescid является первичным ключом таблицы ресурсов, вы можете присоединиться к таблице ресурсов слева либо в соответствующих состояниях, либо когда это общенациональный ресурс и считать pk_rescid для каждого состояния.

SELECT s.state,
       count(r.pk_rescid)
       FROM state s
            LEFT JOIN resource r
                      ON r.state = s.state
                         OR r.nationwide = 'Y'
       GROUP BY s.state;
...