blob: d951df59461baac1ea316bd44885869118d86001 [file] [log] [blame]
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子句:可能存在多个,用于定义条件与给出结果。此子句又分为WHENTHEN两个部分,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子句中的expressioncondition为假时继续检查下一个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">&gt;</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">&lt;</span>T <span class="token operator">and</span> T<span class="token operator">&lt;</span><span class="token number">1050</span> <span class="token operator">and</span> <span class="token number">1000000</span><span class="token operator">&lt;</span>P <span class="token operator">and</span> P<span class="token operator">&lt;</span><span class="token number">1100000</span> <span class="token keyword">then</span> <span class="token string">&quot;good!&quot;</span>
<span class="token keyword">when</span> T<span class="token operator">&lt;=</span><span class="token number">1000</span> <span class="token operator">or</span> T<span class="token operator">&gt;=</span><span class="token number">1050</span> <span class="token keyword">then</span> <span class="token string">&quot;bad temperature&quot;</span>
<span class="token keyword">when</span> P<span class="token operator">&lt;=</span><span class="token number">1000000</span> <span class="token operator">or</span> P<span class="token operator">&gt;=</span><span class="token number">1100000</span> <span class="token keyword">then</span> <span class="token string">&quot;bad pressure&quot;</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">&gt;</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">&quot;%cc%&quot;</span> <span class="token keyword">then</span> <span class="token string">&quot;has cc&quot;</span>
<span class="token keyword">when</span> str <span class="token operator">like</span> <span class="token string">&quot;%dd%&quot;</span> <span class="token keyword">then</span> <span class="token string">&quot;has dd&quot;</span>
<span class="token keyword">else</span> <span class="token string">&quot;no cc and dd&quot;</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">&gt;</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">&lt;=</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">&lt;</span>x <span class="token operator">and</span> x<span class="token operator">&lt;=</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">&lt;</span>x <span class="token operator">and</span> x<span class="token operator">&lt;=</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">&lt;</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">&lt;=</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">&gt;</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">&quot;one&quot;</span> <span class="token keyword">when</span> <span class="token number">2</span> <span class="token keyword">then</span> <span class="token string">&quot;two&quot;</span> <span class="token keyword">else</span> <span class="token string">&quot;other&quot;</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 &quot;one&quot; WHEN root.test4.x = 2 THEN &quot;two&quot; ELSE &quot;other&quot;|
+-----------------------------+------------+-----------------------------------------------------------------------------------+
|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">&quot;str&quot;</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};