Возвращает столбец, если другой столбец равен 3, в противном случае возвращает 0

#mysql #sql

#mysql #sql

Вопрос:

Я могу создать запрос, который ищет «столбец 2» в «таблице 1» для значения «3» и возвращает значение в отдельном «столбце 1»

 SELECT [Column 2]
FROM [Table 1]
WHERE [Column 1] = 3
 

Однако я не знаю, как заставить запрос возвращать «0», если «3» не найдено — любая помощь по этому поводу?

Ответ №1:

Вы можете использовать агрегацию:

 select (case when count(*) = 0 then 0 else max(column2) end) as has_3
from table1
where column1 = 3;
 

Или проще:

 select coalesce(max(column2), 0)
from table1
where column1 = 3;
 

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

1. Где вы ссылаетесь на столбец 2? Существует несколько столбцов, но требуется вернуть только столбец 2.

2. @user14750197 . . . Что, если есть несколько значений?

3. Если в столбце 1 имеется несколько значений «3», тогда возвращается только значение столбца 2, которое было введено последним в таблице (дальше всего вниз по таблице).

4. Похоже, что вы обработали редактирование: ВЫБЕРИТЕ (СЛУЧАЙ, КОГДА COUNT (*) = 0, ЗАТЕМ 0 ELSE MAX (столбец 2) end) как столбец 2 ИЗ [Таблица 1], где столбец 1 = 3

Ответ №2:

Используйте case :

 select
  case
    when column1 = 3 then column2
    else 0
  end as column2
FROM table1
 

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

1. Похоже, что это возвращает массив, как если бы все значения в столбце 2 были «0», а затем возвращает фактическое значение в столбце 2, где столбец 1 = 3

2. Не уверен, что вы имеете в виду; мне кажется, что он делает именно то, что вы просите (хотя в другом вопросе было совершенно другое представление о том, что вы спросили). Добавьте некоторые образцы данных и ожидаемые результаты для этого образца данных к вашему вопросу