Отобразить значения условий WHERE, которые соответствуют выбранным полям - PullRequest
0 голосов
/ 17 декабря 2018

Давайте рассмотрим, что у меня есть таблица с именем Citizens , содержащая эти поля и значения:

| ID | Name   | Age |
|----|:------:|---: |
| 1  | King   | 60  |
| 2  | Queen  | 50  |
| 3  | Prince | 25  |

Если я хочу отображать граждан, которые находятся между " 50 и 100"лет и других, которые находятся между" 5 и 30", я мог бы использовать простое условие WHERE , подобное этому:

SELECT * FROM Citizens WHERE (Age BETWEEN 5 AND 30 ) OR (Age BETWEEN 50 AND 100 );

Но возникает вопрос: как отобразить минимальный и максимальный запрошенных возрастов рядом с каждой строкой, которые соответствуют условиям, чтобы иметь что-то подобное?

| ID | Name   | Age |INTERVAL|
|----|:------:|:---:|-------:|
| 1  | King   | 60  | 50-100 |
| 2  | Queen  | 50  | 50-100 |
| 3  | Prince | 25  |  5-30  |

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Я бы использовал оператор CASE:

SELECT
  id, name, age,
  case when age between 5 and 30 then '5-30' else '50-100' end as interval
FROM Citizens
WHERE (Age BETWEEN 5 AND 30 ) OR (Age BETWEEN 50 AND 100 );
0 голосов
/ 17 декабря 2018

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

SELECT Id, Name, Age,
    CASE WHEN Age BETWEEN 5 AND 30 THEN '5-30'
         WHEN Age BETWEEN 50 AND 100 THEN '50-100'
         ELSE 'OTHER' END AS INTERVAL
FROM Citizens
WHERE (Age BETWEEN 5 AND 30) OR (Age BETWEEN 50 AND 100);

Примечание. Я не уверен, хотите ли вы отображать только определенные возрастные диапазоны.Если это так, то оставьте текущее предложение WHERE без изменений.Если вместо этого вы хотите включить все данные, удалите предложение WHERE.В этом случае несоответствующие диапазоны будут сообщаться как OTHER.

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

start | end | interval
5     | 30  | 5-30
50    | 100 | 50-100

Затем присоединитесь к этой таблице, чтобывведите метку интервала:

SELECT c.Id, c.Name, c.Age, i.interval
FROM Citizens c
INNER JOIN interval i
    ON c.Age BETWEEN i.start AND i.end
WHERE (c.Age BETWEEN 5 AND 30) OR (c.Age BETWEEN 50 AND 100);

Одним из основных возможных преимуществ этого второго подхода является то, что можно было бы ввести стратегию индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...