假设我有一个名为 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 |
最佳答案
您可以使用 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);
第二种方法的一个主要可能优势是可以引入索引策略。
关于mysql - 显示在所选字段中匹配的 WHERE 条件值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53818502/