| import{_ as s,O as n,P as a,ah as e,aW as p}from"./framework-44b8a372.js";const o={},t=p(`<h2 id="条件表达式" tabindex="-1"><a class="header-anchor" href="#条件表达式" aria-hidden="true">#</a> 条件表达式</h2><h3 id="case" tabindex="-1"><a class="header-anchor" href="#case" aria-hidden="true">#</a> CASE</h3><h4 id="介绍" tabindex="-1"><a class="header-anchor" href="#介绍" aria-hidden="true">#</a> 介绍</h4><p>CASE表达式是一种条件表达式,可用于根据特定条件返回不同的值,功能类似于其它语言中的if-else。 CASE表达式由以下部分组成:</p><ul><li>CASE关键字:表示开始CASE表达式。</li><li>WHEN-THEN子句:可能存在多个,用于定义条件与给出结果。此子句又分为WHEN和THEN两个部分,WHEN部分表示条件,THEN部分表示结果表达式。如果WHEN条件为真,则返回对应的THEN结果。</li><li>ELSE子句:如果没有任何WHEN-THEN子句的条件为真,则返回ELSE子句中的结果。可以不存在ELSE子句。</li><li>END关键字:表示结束CASE表达式。</li></ul><p>CASE表达式是一种标量运算,可以配合任何其它的标量运算或聚合函数使用。</p><p>下文把所有THEN部分和ELSE子句并称为结果子句。</p><h4 id="语法示例" tabindex="-1"><a class="header-anchor" href="#语法示例" aria-hidden="true">#</a> 语法示例</h4><p>CASE表达式支持两种格式。</p><p>语法示例如下:</p><ul><li>格式1:</li></ul><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code> <span class="token keyword">CASE</span> |
| <span class="token keyword">WHEN</span> condition1 <span class="token keyword">THEN</span> expression1 |
| <span class="token punctuation">[</span><span class="token keyword">WHEN</span> condition2 <span class="token keyword">THEN</span> expression2<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> |
| <span class="token punctuation">[</span><span class="token keyword">ELSE</span> expression_end<span class="token punctuation">]</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>从上至下检查WHEN子句中的condition。</p><p>condition为真时返回对应THEN子句中的expression,condition为假时继续检查下一个WHEN子句中的condition。</p><ul><li>格式2:</li></ul><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code> <span class="token keyword">CASE</span> caseValue |
| <span class="token keyword">WHEN</span> whenValue1 <span class="token keyword">THEN</span> expression1 |
| <span class="token punctuation">[</span><span class="token keyword">WHEN</span> whenValue2 <span class="token keyword">THEN</span> expression2<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> |
| <span class="token punctuation">[</span><span class="token keyword">ELSE</span> expression_end<span class="token punctuation">]</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>从上至下检查WHEN子句中的whenValue是否与caseValue相等。</p><p>满足caseValue=whenValue时返回对应THEN子句中的expression,不满足时继续检查下一个WHEN子句中的whenValue。</p><p>格式2会被iotdb转换成等效的格式1,例如以上sql语句会转换成:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code> <span class="token keyword">CASE</span> |
| <span class="token keyword">WHEN</span> caseValue<span class="token operator">=</span>whenValue1 <span class="token keyword">THEN</span> expression1 |
| <span class="token punctuation">[</span><span class="token keyword">WHEN</span> caseValue<span class="token operator">=</span>whenValue1 <span class="token keyword">THEN</span> expression1<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> |
| <span class="token punctuation">[</span><span class="token keyword">ELSE</span> expression_end<span class="token punctuation">]</span> |
| <span class="token keyword">END</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>如果格式1中的condition均不为真,或格式2中均不满足caseVaule=whenValue,则返回ELSE子句中的expression_end;不存在ELSE子句则返回null。</p><h4 id="注意事项" tabindex="-1"><a class="header-anchor" href="#注意事项" aria-hidden="true">#</a> 注意事项</h4><ul><li>格式1中,所有WHEN子句必须返回BOOLEAN类型。</li><li>格式2中,所有WHEN子句必须能够与CASE子句进行判等。</li><li>一个CASE表达式中所有结果子句的返回值类型需要满足一定的条件: <ul><li>BOOLEAN类型不能与其它类型共存,存在其它类型会报错。</li><li>TEXT类型不能与其它类型共存,存在其它类型会报错。</li><li>其它四种数值类型可以共存,最终结果会为DOUBLE类型,转换过程可能会存在精度损失。</li></ul></li><li>CASE表达式没有实现惰性计算,即所有子句都会被计算。</li><li>CASE表达式不支持与UDF混用。</li><li>CASE表达式内部不能存在聚合函数,但CASE表达式的结果可以提供给聚合函数。</li><li>使用CLI时,由于CASE表达式字符串较长,推荐用as为表达式提供别名。</li></ul><h4 id="使用示例" tabindex="-1"><a class="header-anchor" href="#使用示例" aria-hidden="true">#</a> 使用示例</h4><h5 id="示例1" tabindex="-1"><a class="header-anchor" href="#示例1" aria-hidden="true">#</a> 示例1</h5><p>CASE表达式可对数据进行直观地分析,例如:</p><ul><li>某种化学产品的制备需要温度和压力都处于特定范围之内</li><li>在制备过程中传感器会侦测温度和压力,在iotdb中形成T(temperature)和P(pressure)两个时间序列</li></ul><p>这种应用场景下,CASE表达式可以指出哪些时间的参数是合适的,哪些时间的参数不合适,以及为什么不合适。</p><p>数据:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code>IoTDB<span class="token operator">></span> <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test1 |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+------------+</span> |
| <span class="token operator">|</span> <span class="token keyword">Time</span><span class="token operator">|</span>root<span class="token punctuation">.</span>test1<span class="token punctuation">.</span>P<span class="token operator">|</span>root<span class="token punctuation">.</span>test1<span class="token punctuation">.</span>T<span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+------------+</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">29</span>T11:<span class="token number">25</span>:<span class="token number">54.724</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1000000.0</span><span class="token operator">|</span> <span class="token number">1025.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">29</span>T11:<span class="token number">26</span>:<span class="token number">13.445</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1000094.0</span><span class="token operator">|</span> <span class="token number">1040.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">29</span>T11:<span class="token number">27</span>:<span class="token number">36.988</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1000095.0</span><span class="token operator">|</span> <span class="token number">1041.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">29</span>T11:<span class="token number">27</span>:<span class="token number">56.446</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1000095.0</span><span class="token operator">|</span> <span class="token number">1059.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">29</span>T11:<span class="token number">28</span>:<span class="token number">20.838</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1200000.0</span><span class="token operator">|</span> <span class="token number">1040.0</span><span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+------------+</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> T<span class="token punctuation">,</span> P<span class="token punctuation">,</span> <span class="token keyword">case</span> |
| <span class="token keyword">when</span> <span class="token number">1000</span><span class="token operator"><</span>T <span class="token operator">and</span> T<span class="token operator"><</span><span class="token number">1050</span> <span class="token operator">and</span> <span class="token number">1000000</span><span class="token operator"><</span>P <span class="token operator">and</span> P<span class="token operator"><</span><span class="token number">1100000</span> <span class="token keyword">then</span> <span class="token string">"good!"</span> |
| <span class="token keyword">when</span> T<span class="token operator"><=</span><span class="token number">1000</span> <span class="token operator">or</span> T<span class="token operator">>=</span><span class="token number">1050</span> <span class="token keyword">then</span> <span class="token string">"bad temperature"</span> |
| <span class="token keyword">when</span> P<span class="token operator"><=</span><span class="token number">1000000</span> <span class="token operator">or</span> P<span class="token operator">>=</span><span class="token number">1100000</span> <span class="token keyword">then</span> <span class="token string">"bad pressure"</span> |
| <span class="token keyword">end</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>result<span class="token punctuation">\`</span></span> |
| <span class="token keyword">from</span> root<span class="token punctuation">.</span>test1 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+------------+------------+---------------+ |
| | Time|root.test1.T|root.test1.P| result| |
| +-----------------------------+------------+------------+---------------+ |
| |2023-03-29T11:25:54.724+08:00| 1025.0| 1000000.0| bad pressure| |
| |2023-03-29T11:26:13.445+08:00| 1040.0| 1000094.0| good!| |
| |2023-03-29T11:27:36.988+08:00| 1041.0| 1000095.0| good!| |
| |2023-03-29T11:27:56.446+08:00| 1059.0| 1000095.0|bad temperature| |
| |2023-03-29T11:28:20.838+08:00| 1040.0| 1200000.0| bad pressure| |
| +-----------------------------+------------+------------+---------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="示例2" tabindex="-1"><a class="header-anchor" href="#示例2" aria-hidden="true">#</a> 示例2</h5><p>CASE表达式可实现结果的自由转换,例如将具有某种模式的字符串转换成另一种字符串。</p><p>数据:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code>IoTDB<span class="token operator">></span> <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test2 |
| <span class="token operator">+</span><span class="token comment">-----------------------------+--------------+</span> |
| <span class="token operator">|</span> <span class="token keyword">Time</span><span class="token operator">|</span>root<span class="token punctuation">.</span>test2<span class="token punctuation">.</span>str<span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+--------------+</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">23</span>:<span class="token number">33.427</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> abccd<span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">23</span>:<span class="token number">39.389</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> abcdd<span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">23</span>:<span class="token number">43.463</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> abcdefg<span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+--------------+</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> str<span class="token punctuation">,</span> <span class="token keyword">case</span> |
| <span class="token keyword">when</span> str <span class="token operator">like</span> <span class="token string">"%cc%"</span> <span class="token keyword">then</span> <span class="token string">"has cc"</span> |
| <span class="token keyword">when</span> str <span class="token operator">like</span> <span class="token string">"%dd%"</span> <span class="token keyword">then</span> <span class="token string">"has dd"</span> |
| <span class="token keyword">else</span> <span class="token string">"no cc and dd"</span> <span class="token keyword">end</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>result<span class="token punctuation">\`</span></span> |
| <span class="token keyword">from</span> root<span class="token punctuation">.</span>test2 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+--------------+------------+ |
| | Time|root.test2.str| result| |
| +-----------------------------+--------------+------------+ |
| |2023-03-27T18:23:33.427+08:00| abccd| has cc| |
| |2023-03-27T18:23:39.389+08:00| abcdd| has dd| |
| |2023-03-27T18:23:43.463+08:00| abcdefg|no cc and dd| |
| +-----------------------------+--------------+------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="示例3-搭配聚合函数" tabindex="-1"><a class="header-anchor" href="#示例3-搭配聚合函数" aria-hidden="true">#</a> 示例3:搭配聚合函数</h5><h6 id="合法-聚合函数←case表达式" tabindex="-1"><a class="header-anchor" href="#合法-聚合函数←case表达式" aria-hidden="true">#</a> 合法:聚合函数←CASE表达式</h6><p>CASE表达式可作为聚合函数的参数。例如,与聚合函数COUNT搭配,可实现同时按多个条件进行数据统计。</p><p>数据:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code>IoTDB<span class="token operator">></span> <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test3 |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| <span class="token operator">|</span> <span class="token keyword">Time</span><span class="token operator">|</span>root<span class="token punctuation">.</span>test3<span class="token punctuation">.</span>x<span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">11.300</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">0.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">14.658</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">15.981</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">2.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">17.668</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">3.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">19.112</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">4.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">20.822</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">5.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">22.462</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">6.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">24.174</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">7.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">25.858</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">8.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">2023</span><span class="token operator">-</span><span class="token number">03</span><span class="token operator">-</span><span class="token number">27</span>T18:<span class="token number">11</span>:<span class="token number">27.979</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">9.0</span><span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> |
| <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">case</span> <span class="token keyword">when</span> x<span class="token operator"><=</span><span class="token number">1</span> <span class="token keyword">then</span> <span class="token number">1</span> <span class="token keyword">end</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>(-∞,1]<span class="token punctuation">\`</span></span><span class="token punctuation">,</span> |
| <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">case</span> <span class="token keyword">when</span> <span class="token number">1</span><span class="token operator"><</span>x <span class="token operator">and</span> x<span class="token operator"><=</span><span class="token number">3</span> <span class="token keyword">then</span> <span class="token number">1</span> <span class="token keyword">end</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>(1,3]<span class="token punctuation">\`</span></span><span class="token punctuation">,</span> |
| <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">case</span> <span class="token keyword">when</span> <span class="token number">3</span><span class="token operator"><</span>x <span class="token operator">and</span> x<span class="token operator"><=</span><span class="token number">7</span> <span class="token keyword">then</span> <span class="token number">1</span> <span class="token keyword">end</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>(3,7]<span class="token punctuation">\`</span></span><span class="token punctuation">,</span> |
| <span class="token function">count</span><span class="token punctuation">(</span><span class="token keyword">case</span> <span class="token keyword">when</span> <span class="token number">7</span><span class="token operator"><</span>x <span class="token keyword">then</span> <span class="token number">1</span> <span class="token keyword">end</span><span class="token punctuation">)</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>(7,+∞)<span class="token punctuation">\`</span></span> |
| <span class="token keyword">from</span> root<span class="token punctuation">.</span>test3 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+------+-----+-----+------+ |
| |(-∞,1]|(1,3]|(3,7]|(7,+∞)| |
| +------+-----+-----+------+ |
| | 2| 2| 4| 2| |
| +------+-----+-----+------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="非法-case表达式←聚合函数" tabindex="-1"><a class="header-anchor" href="#非法-case表达式←聚合函数" aria-hidden="true">#</a> 非法:CASE表达式←聚合函数</h6><p>不支持在CASE表达式内部使用聚合函数。</p><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> <span class="token keyword">case</span> <span class="token keyword">when</span> x<span class="token operator"><=</span><span class="token number">1</span> <span class="token keyword">then</span> <span class="token function">avg</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token keyword">else</span> <span class="token function">sum</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span> <span class="token keyword">end</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test3 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>Msg: 701: Raw data and aggregation result hybrid calculation is not supported. |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h5 id="示例4-格式2" tabindex="-1"><a class="header-anchor" href="#示例4-格式2" aria-hidden="true">#</a> 示例4:格式2</h5><p>一个使用格式2的简单例子。如果所有条件都为判等,则推荐使用格式2,以简化SQL语句。</p><p>数据:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code>IoTDB<span class="token operator">></span> <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| <span class="token operator">|</span> <span class="token keyword">Time</span><span class="token operator">|</span>root<span class="token punctuation">.</span>test4<span class="token punctuation">.</span>x<span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| <span class="token operator">|</span><span class="token number">1970</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span>T08:<span class="token number">00</span>:<span class="token number">00.001</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">1.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">1970</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span>T08:<span class="token number">00</span>:<span class="token number">00.002</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">2.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">1970</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span>T08:<span class="token number">00</span>:<span class="token number">00.003</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">3.0</span><span class="token operator">|</span> |
| <span class="token operator">|</span><span class="token number">1970</span><span class="token operator">-</span><span class="token number">01</span><span class="token operator">-</span><span class="token number">01</span>T08:<span class="token number">00</span>:<span class="token number">00.004</span><span class="token operator">+</span><span class="token number">08</span>:<span class="token number">00</span><span class="token operator">|</span> <span class="token number">4.0</span><span class="token operator">|</span> |
| <span class="token operator">+</span><span class="token comment">-----------------------------+------------+</span> |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> x<span class="token punctuation">,</span> <span class="token keyword">case</span> x <span class="token keyword">when</span> <span class="token number">1</span> <span class="token keyword">then</span> <span class="token string">"one"</span> <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token string">"two"</span> <span class="token keyword">else</span> <span class="token string">"other"</span> <span class="token keyword">end</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+------------+-----------------------------------------------------------------------------------+ |
| | Time|root.test4.x|CASE WHEN root.test4.x = 1 THEN "one" WHEN root.test4.x = 2 THEN "two" ELSE "other"| |
| +-----------------------------+------------+-----------------------------------------------------------------------------------+ |
| |1970-01-01T08:00:00.001+08:00| 1.0| one| |
| |1970-01-01T08:00:00.002+08:00| 2.0| two| |
| |1970-01-01T08:00:00.003+08:00| 3.0| other| |
| |1970-01-01T08:00:00.004+08:00| 4.0| other| |
| +-----------------------------+------------+-----------------------------------------------------------------------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h5 id="示例5-结果子句类型" tabindex="-1"><a class="header-anchor" href="#示例5-结果子句类型" aria-hidden="true">#</a> 示例5:结果子句类型</h5><p>CASE表达式的结果子句的返回值需要满足一定的类型限制。</p><p>此示例中,继续使用示例4中的数据。</p><h6 id="非法-boolean与其它类型共存" tabindex="-1"><a class="header-anchor" href="#非法-boolean与其它类型共存" aria-hidden="true">#</a> 非法:BOOLEAN与其它类型共存</h6><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> x<span class="token punctuation">,</span> <span class="token keyword">case</span> x <span class="token keyword">when</span> <span class="token number">1</span> <span class="token keyword">then</span> <span class="token boolean">true</span> <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token number">2</span> <span class="token keyword">end</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>Msg: 701: CASE expression: BOOLEAN and other types cannot exist at same time |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h6 id="合法-只存在boolean类型" tabindex="-1"><a class="header-anchor" href="#合法-只存在boolean类型" aria-hidden="true">#</a> 合法:只存在BOOLEAN类型</h6><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> x<span class="token punctuation">,</span> <span class="token keyword">case</span> x <span class="token keyword">when</span> <span class="token number">1</span> <span class="token keyword">then</span> <span class="token boolean">true</span> <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token boolean">false</span> <span class="token keyword">end</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>result<span class="token punctuation">\`</span></span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+------------+------+ |
| | Time|root.test4.x|result| |
| +-----------------------------+------------+------+ |
| |1970-01-01T08:00:00.001+08:00| 1.0| true| |
| |1970-01-01T08:00:00.002+08:00| 2.0| false| |
| |1970-01-01T08:00:00.003+08:00| 3.0| null| |
| |1970-01-01T08:00:00.004+08:00| 4.0| null| |
| +-----------------------------+------------+------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h6 id="非法-text与其它类型共存" tabindex="-1"><a class="header-anchor" href="#非法-text与其它类型共存" aria-hidden="true">#</a> 非法:TEXT与其它类型共存</h6><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> x<span class="token punctuation">,</span> <span class="token keyword">case</span> x <span class="token keyword">when</span> <span class="token number">1</span> <span class="token keyword">then</span> <span class="token number">1</span> <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token string">"str"</span> <span class="token keyword">end</span> <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>Msg: 701: CASE expression: TEXT and other types cannot exist at same time |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><h6 id="合法-只存在text类型" tabindex="-1"><a class="header-anchor" href="#合法-只存在text类型" aria-hidden="true">#</a> 合法:只存在TEXT类型</h6><p>见示例1。</p><h6 id="合法-数值类型共存" tabindex="-1"><a class="header-anchor" href="#合法-数值类型共存" aria-hidden="true">#</a> 合法:数值类型共存</h6><p>SQL语句:</p><div class="language-sql line-numbers-mode" data-ext="sql"><pre class="language-sql"><code><span class="token keyword">select</span> x<span class="token punctuation">,</span> <span class="token keyword">case</span> x |
| <span class="token keyword">when</span> <span class="token number">1</span> <span class="token keyword">then</span> <span class="token number">1</span> |
| <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token number">222222222222222</span> |
| <span class="token keyword">when</span> <span class="token number">3</span> <span class="token keyword">then</span> <span class="token number">3.3</span> |
| <span class="token keyword">when</span> <span class="token number">4</span> <span class="token keyword">then</span> <span class="token number">4.4444444444444</span> |
| <span class="token keyword">end</span> <span class="token keyword">as</span> <span class="token identifier"><span class="token punctuation">\`</span>result<span class="token punctuation">\`</span></span> |
| <span class="token keyword">from</span> root<span class="token punctuation">.</span>test4 |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>输出:</p><div class="language-text line-numbers-mode" data-ext="text"><pre class="language-text"><code>+-----------------------------+------------+-------------------+ |
| | Time|root.test4.x| result| |
| +-----------------------------+------------+-------------------+ |
| |1970-01-01T08:00:00.001+08:00| 1.0| 1.0| |
| |1970-01-01T08:00:00.002+08:00| 2.0|2.22222222222222E14| |
| |1970-01-01T08:00:00.003+08:00| 3.0| 3.299999952316284| |
| |1970-01-01T08:00:00.004+08:00| 4.0| 4.44444465637207| |
| +-----------------------------+------------+-------------------+ |
| </code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>`,90);function l(r,c){return n(),a("div",null,[e(` |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| `),t])}const d=s(o,[["render",l],["__file","Conditional.html.vue"]]);export{d as default}; |