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

#sql

#sql

Вопрос:

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

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

Например, я хочу пиццу с томатным соусом, сыром, пепперони, беконом и грибами.

 SELECT * 
FROM Pizzas 
WHERE Sauce = tomato 
  AND Cheese = true 
  AND Pepperoni = true 
  AND Bacon = true 
  AND Mushrooms = true
  

Ничего не возвращает.

Но я все равно хочу пиццу, которая может выполнять максимум этих условий.

Я думал о том, чтобы сделать что-то вроде

 SELECT * 
FROM Pizzas 
WHERE Sauce = tomato 
   OR Cheese = true 
   OR Pepperoni = true 
   OR Bacon = true 
   OR Mushrooms = true
  

А затем упорядочивает по количеству выполненных условий.

Но я не знаю, возможно ли это, и если да, то как это сделать?

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

1. tomato это столбец с именем tomato . 'tomato' является строковым литералом, содержащим tomato.

2. Логический синтаксис теста должен быть column IS TRUE .

3. Пометьте свой вопрос базой данных, которую вы используете.

Ответ №1:

Вы можете упорядочить по условиям, которые соответствуют:

 SELECT *
FROM Pizzas
WHERE (CASE WHEN Sauce=tomato THEN 1 ELSE 0 END  
       CASE WHEN Cheese=true THEN 1 ELSE 0 END  
       CASE WHEN Pepperoni=true THEN 1 ELSE 0 END  
       CASE WHEN Bacon=true THEN 1 ELSE 0 END  
       CASE WHEN Mushrooms=true THEN 1 ELSE 0 END
      ) DESC
FETCH FIRST 1 ROW ONLY
  

В зависимости от вашей базы данных синтаксис может немного отличаться.

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

1. Большое спасибо, я не знал об операторе case 🙂