Как я Комбинирую эти Запросы Select SQL в один оператор SELECT

Как делают я комбинирую эти два избранных оператора в один запрос:

SELECT SUM( incidents )  AS fires, neighborhoods AS fire_neighborhoods
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location`
UNION ALL SELECT * 
FROM `fires_2007_incident_location`
UNION ALL SELECT * 
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC



SELECT SUM( incidents )  AS adw, neighborhoods AS adw_neighborhoods
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location`
UNION ALL SELECT * 
FROM `adw_2007_incident_location`
UNION ALL SELECT * 
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC

Так, я хотел бы, чтобы запрос возвратился, что-то как:

fire_neighborhoods  fires  adw_neighborhoods  adw
xyzNeighborhood     6      abcNeighborhood    22
jklNeighborhood     3      tuvNeighborhood    40

Я хочу просто объединить результаты двух запросов выше. Два запроса независимы друг от друга. Результаты каждый не производит результаты другого запроса. Мне просто нужен способ хлопнуть двумя результатами вместе в один.

Если у кого-либо есть совет, сообщите мне.

Спасибо.

- Laxmidi

8
задан David Hall 4 March 2010 в 03:06
поделиться

5 ответов

Спасибо за помощь в выяснении этого вопроса. Привет Дэвиду Холлу, Аарону, Джеффри Уитледж и NYSystemsAnalyst. Я выбрал вариант фиктивного столбца:

SELECT SUM( incidents ) , neighborhoods,  'adw' as offense 
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location`
UNION ALL SELECT * 
FROM `adw_2007_incident_location`
UNION ALL SELECT * 
FROM `adw_2006_incident_location`
) AS combo 
GROUP BY neighborhoods  
UNION ALL
SELECT SUM( incidents ), neighborhoods,  'fire' as offense 
FROM (
SELECT * 
FROM `fire_2009_incident_location` 
UNION ALL SELECT * 
FROM `fire_2008_incident_location`
UNION ALL SELECT * 
FROM `fire_2007_incident_location`
UNION ALL SELECT * 
FROM `fire_2006_incident_location`
) AS combo2
GROUP BY neighborhoods 
1
ответ дан 5 December 2019 в 21:18
поделиться

В приведенном вами примере показано, что вы хотите объединить запросы по горизонтали, но позже вы заявили, что они полностью независимы. Это противоречивые утверждения, потому что вы обычно комбинируете данные по горизонтали, когда записи связаны друг с другом. Ниже представлена ​​моя идея комбинировать их по горизонтали, но я также отмечаю свою идею комбинирования их по вертикали ниже этого.

Это зависит от того, как вы хотите их связать. Если вы запрашиваете на основе соседства, вы можете выполнить соединение между двумя более крупными запросами на fire_neighborhoods = adw_neighborhoods, например:

SELECT fire_neighborhoods, fires, adw
FROM (

SELECT SUM( incidents )  AS fires, neighborhoods AS fire_neighborhoods
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location`
UNION ALL SELECT * 
FROM `fires_2007_incident_location`
UNION ALL SELECT * 
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC

) AS fires
    INNER JOIN (  

SELECT SUM( incidents )  AS adw, neighborhoods AS adw_neighborhoods
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location`
UNION ALL SELECT * 
FROM `adw_2007_incident_location`
UNION ALL SELECT * 
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC

) AS adw
    ON fires.fire_neighborhoods = adw.adw_neighborhoods

Это всего лишь пример. Возможно, вам понадобится другое соединение или что-то еще, чтобы оно работало на вас.

Вы заявили, что два запроса независимы и не влияют друг на друга. Если у них действительно нет точек соприкосновения, вы должны добавить столбец к каждому запросу, указывающий на запрос, из которого он был получен (например, добавить столбец с постоянным значением 1 для пожарного запроса и столбец с постоянным значением 2 для adw запрос). Затем просто СОЕДИНИТЕ два больших запроса вместе. Это позволит объединить их вертикально, а не горизонтально.

3
ответ дан 5 December 2019 в 21:18
поделиться

Отображение двух несвязанных запросов рядом друг с другом обычно является задачей программного обеспечения для создания отчетов, а не SQL-движка. Проблема здесь в том, что вы просите инструмент запросов сделать то, для чего он не приспособлен: отобразить форматирование.

Отношение (а именно таким должен быть результат SELECT, по сути) - это структура данных, которая делает утверждения о состоянии мира. Каждая строка определяет ряд утверждений, которые (в идеале) являются истинными.

В вашем вопросе строки содержат произвольные комбинации фактов, которые не связаны друг с другом и о которых нельзя утверждать никаких предложений.

0
ответ дан 5 December 2019 в 21:18
поделиться

Если я правильно понимаю, что вам нужно, вы можете ОБЪЕДИНЯТЬ запросы вместе, добавив столбец, чтобы вы знали, из какого запроса он пришел:

SELECT SUM( incidents )  AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'Fires' as which_query
FROM (
SELECT * 
FROM `fires_2009_incident_location` 
UNION ALL SELECT * 
FROM `fires_2008_incident_location`
UNION ALL SELECT * 
FROM `fires_2007_incident_location`
UNION ALL SELECT * 
FROM `fires_2006_incident_location`
) AS combo
GROUP BY fire_neighborhoods ORDER BY fires DESC

UNION

SELECT SUM( incidents )  AS fires_or_adw, neighborhoods AS fire_or_adw_neighborhoods, 'ADW' as which_query
FROM (
SELECT * 
FROM `adw_2009_incident_location` 
UNION ALL SELECT * 
FROM `adw_2008_incident_location`
UNION ALL SELECT * 
FROM `adw_2007_incident_location`
UNION ALL SELECT * 
FROM `adw_2006_incident_location`
) AS combo2
GROUP BY adw_neighborhoods ORDER BY adw DESC

Допустим, у вас будет вдвое больше строк, и половина ваших данных будет нулевой , но просто "захлопывать" результаты вместе, как в вашем примере, не является обычным явлением.

2
ответ дан 5 December 2019 в 21:18
поделиться

Ответы других на использование столбца дискриминатора выглядят так же, как и вам, но на всякий случай можно добавить столбцы фиктивных заполнителей в профсоюзы, как показано ниже:

SELECT 
    SUM( incidents )  AS fires, 
    neighborhoods AS fire_neighborhoods,
    0 as adw,
    '' as adw_neighbourhoods
FROM ( 
    SELECT *  
    FROM `fires_2009_incident_location`  
    UNION ALL SELECT *  
    FROM `fires_2008_incident_location` 
    UNION ALL SELECT *  
    FROM `fires_2007_incident_location` 
    UNION ALL SELECT *  
    FROM `fires_2006_incident_location` 
) AS combo 
GROUP BY fire_neighborhoods ORDER BY fires DESC 

UNION 

SELECT 
    0 as fires,
   '' as fire_neighbourhoods,
    SUM( incidents )  AS adw, 
    neighborhoods AS adw_neighborhoods 
FROM ( 
    SELECT *  
    FROM `adw_2009_incident_location`  
    UNION ALL SELECT *  
    FROM `adw_2008_incident_location` 
    UNION ALL SELECT *  
    FROM `adw_2007_incident_location` 
    UNION ALL SELECT *  
    FROM `adw_2006_incident_location` 
) AS combo2 
GROUP BY adw_neighborhoods ORDER BY adw DESC
1
ответ дан 5 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: