Объединение двух запросов с разными условиями WHERE

#sql #database #sqlite

#sql #База данных #sqlite

Вопрос:

Я пытаюсь использовать sqlite3 для получения результатов для двух запросов с разными условиями WHERE из одной и той же таблицы. Я могу заставить запросы работать независимо, но не смог их объединить.

Запрос 1:

 SELECT COUNT(*) AS 'With Survivors', Day FROM crashes 
WHERE Fatalities < Aboard Group BY DIndex
  

Результаты:

     With Survivors  Day
0   231             Monday
1   262             Tuesday
2   243             Wednesday
3   271             Thursday
4   255             Friday
5   254             Saturday
6   216             Sunday
  

Запрос 2:

 SELECT Count(*) AS 'Total Crashes', Day FROM crashes GROUP BY DIndex
  

Результаты:

     Total Crashes  Day
0   713            Monday
1   796            Tuesday
2   796            Wednesday
3   818            Thursday
4   797            Friday
5   741            Saturday
6   607            Sunday
  

Я хотел бы объединить их, чтобы я мог получить следующее:

     With Survivors  Total Crashes   Day
0   231             713             Monday
1   262             796             Tuesday
2   243             796             Wednesday
3   271             818             Thursday
4   255             797             Friday
5   254             741             Saturday
6   216             607             Sunday
  

Я довольно новичок в SQL, поэтому, хотя я пытался искать ответы, я даже не уверен, что ввожу правильный запрос в свою поисковую систему.

Комментарии:

1. какова структура вашей таблицы «сбоев», возможно, вы можете выбрать несколько столбцов, которые хотите вернуть

2. почему бы не объединить эти два запроса. Рассмотрим первый запрос как представление 1, второй как представление 2, а затем объединим столбцы с названием дня. например: скажем, Select A.'With Survivors', B.'Total Crashes' , A.Day from A join B on Day где A — запрос 1, B — запрос 2.

Ответ №1:

SQLite поддерживает выражение CASE, поэтому должно сработать что-то вроде этого

 SELECT 
   Sum( Case WHEN Fatalities < Aboard THEN 1 ELSE 0 end ) AS 'With Survivors',
   Count(*) AS 'Total Crashes', 
   Day 
FROM crashes 
GROUP BY DIndex
  

Ответ №2:

Возможно, вы могли бы использовать UNION для объединения двух операторов SELECT

 SELECT COUNT(*) AS 'With Survivors', Day FROM crashes 
WHERE Fatalities < Aboard Group BY DIndex
UNION
SELECT Count(*) AS 'Total Crashes', Day FROM crashes GROUP BY DIndex;
  

Комментарии:

1. Спасибо, но это не дало мне совсем того, что я искал. В итоге были получены следующие результаты: « С выжившими День 0 216 Воскресенье 1 231 понедельник 2 243 Среда 3 254 Суббота 4 255 Пятница 5 262 Вторник 6 271 Четверг 7 607 Воскресенье 8 713 Понедельник 9 741 Суббота 10 796 Вторник 11 796 Среда 12 797 Пятница 13 818 четверг«