Прошу прощения, если на этот вопрос ответили еще где, я выдернул свои волосы в поисках, но пока ничего не нашел.
У меня есть следующие таблицы:
Table: STATES
+------------+---------+
| name | stateID |
+------------+---------+
| Florida | FL |
| California | CA |
| New Jersey | NJ |
+------------+---------+
Table: AREAS
+-------+---------+-------+
| name | stateID | locID |
+-------+---------+-------+
| Area1 | FL | 1 |
| Area2 | FL | 1 |
| Area3 | FL | 2 |
| Area4 | NJ | 3 |
| Area5 | NJ | 3 |
| Area6 | NJ | 4 |
| Area7 | CA | 5 |
| Area8 | CA | 6 |
| Area9 | CA | 7 |
+-------+---------+-------+
Table: LOCATIONS
+----------+-------+
| name | locID |
+----------+-------+
| Orlando | 1 |
| Brevard | 2 |
| North NJ | 3 |
| South NJ | 4 |
| B Hills | 5 |
| East LA | 6 |
| SanFran | 7 |
+----------+-------+
Результат, который я пытаюсь получить:
| STATES.name | LOCATIONS.name | COUNT(locations in state) | AREAS.name
Я могу получить все, кроме счета достаточно легко, но я просто не могу узнать, сколько мест в каждом штате.Кажется, это должно быть просто, я просто что-то упустил?
Вот запрос, с которым я работал:
SELECT
STATES.name AS state
,LOCATIONS.name AS location
,AREAS.name AS area
,(SELECT
COUNT(*)
FROM
(SELECT
areaID
FROM
AREAS
WHERE
AREAS.stateID = STATES.stateID
GROUP BY
AREAS.locID
) AS area_count
) AS row_count
FROM
STATES
LEFT JOIN AREAS ON STATES.stateID = AREAS.stateID
LEFT JOIN LOCATIONS ON AREAS.locID = LOCATIONS.locID;
Конечно, это не удается из-за отсутствиялюбой STATES.stateID в подзапросе 1 для подзапроса 2 для ссылки.Я попытался передать stateID вместе с JOIN
в таблицу в подзапросе 1, а также JOIN
в подзапросе 2 вместо того, чтобы пытаться ссылаться на нее в операторе WHERE
.Это также не помогает, учитывая, что весь подзапрос 2 является частью оператора WHERE
для подзапроса 1 ...
Я также пытался изолировать запросы, чтобы получить только AREAS.stateID
и COUNT(locations in state)
, но длябезрезультатно, я продолжаю получать количество областей в штате, а не количество местоположений:
select AREAS.stateID
, COUNT(AREAS.locID)
FROM AREAS group by AREAS.stateID
Бросок DISTINCT
в COUNT()
приближает меня, но некоторые значения по-прежнему отключены, не уверен, откуда берутся цифры, так как они не соответствуют количеству локаций для всех случаев, но большинство из них ...