sql - 获取组合 CASE 语句的 MAX
问题描述
我有 4 个 CASE 语句,我想知道如何只显示计算的 MAX。
我尝试将我的 CASE 语句与 COALESCE 函数结合起来。
SELECT
ID,
CASE
WHEN tw.displayText IN ('A','B','C') THEN 'A1'
WHEN tw.displayText IN ('D','E','F') THEN 'A2'
WHEN tw.displayText IN ('G','H','I') THEN 'A3'
ELSE NULL
END AS COL1
如果COL1
可以采取所有 3 ( , , )我该怎么做A3
ID
A1
A2
A3
ID COL1
1 A1
1 A2
1 A3
ID COL1
1 A3
解决方案
虽然你的问题的措辞不清楚,但如果我今天的读心技巧是正确的,我认为这就是你所需要的:
SELECT CASE
WHEN tw.displayText IN ('G','H','I') THEN 3
WHEN tw.displayText IN ('D','E','F') THEN 2
WHEN tw.displayText IN ('A','B','C') THEN 1
ELSE NULL
END AS COL1
为什么?因为对单个 CASE 表达式求值使得第一个 WHEN(从上到下)求值为 true 是表达式将返回的值。其余的将被忽略。
因此,在此表达式中,如果导致“3”的条件为真,则返回“3”并忽略其他条件。如果“3”不成立,则检查“2”的条件。等等。
现在,如果您打算使用 GROUP BY 并实际获得一个聚合,那么您需要将整个 CASE..END 表达式包装在一个 MAX() 函数中。
推荐阅读
- mysql - SQL AND 无要求
- python-3.x - 在 Jupyter Notebook Markdown 中自动生成日期
- elasticsearch - Elasticsearch - 一般架构和 Elastic Cloud 问题
- java - 表单内的 Thymeleaf href 转到不同的页面
- c++ - vkGetPhysicalDeviceQueueFamilyProperties 段错误
- c++ - 在 C++ 中是否有类似于 Python 中的 help() 的函数
- angular - 在 Angular 应用程序中刷新仪表板页面时清除 localStorage 中的令牌
- node.js - HTTPClient收到错误拒绝节点JS服务器(奇怪的行为)
- gulp - 使用 gulp 和浏览器同步强制刷新
- javascript - Xtermjs 不渲染大输出