SQL: выберите 3 значения и подсчитайте, сколько раз они отличаются

#sql #select #subquery

#sql #выберите #подзапрос

Вопрос:

Скажите, что вам нужно запросить некоторые данные и что есть три поля, подобные следующим (это часть более крупного запроса): Field1 , Field2 , Field3 .

Итак, вы выбираете их следующим образом:

 SELECT Field1=MyTable.Field1, Field2=MyTable.Field2, Field3=MyTable.Field3
FROM MyTable
  

Мне нужно сравнить эти значения и вернуть переменную Result , которая вычисляется следующим образом:

  • 0, если они все одинаковые
  • 1/2, если два одинаковых, а одно другое
  • 1, если все они разные.

Как я должен реструктурировать свой запрос? Я думаю, что мне нужен подзапрос, но я не уверен, как его структурировать.

Ответ №1:

Вы можете использовать case :

 select (case when field1 = field2 and field1 = field3 then 0
             when field1 in (field2, field3) or field2 = field3 then 0.5
             else 1
        end) as result
  

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

1. Если я сделаю это так, возвращаемые значения не будут связаны ни с каким именем переменной. Куда должно Result идти имя переменной?

2. подразумевается добавление as result

3. Проверьте мои изменения. При выборе этим переменным присваивается другое имя. Не приведет ли это к путанице из-за слишком большого количества = знаков в запросе?

4. @Zizzipupp . , , На самом деле, имена, которые вы присваиваете, такие же, как и столбцы, которые будут заданы в любом случае. Но да, вы должны использовать полные имена столбцов для выражений в case .