【问题标题】:SQL conditionally select different aggergatesSQL 有条件地选择不同的聚合
【发布时间】:2012-07-12 05:24:19
【问题描述】:

假设我有一个表T,它有一个属性A,一个整数。

如果 T 包含 5 和 MAX(T) + 2 如果不包含,我如何让 SQL 查询返回 MAX(T) + 1

【问题讨论】:

  • 这个奇怪要求背后的真正任务是什么? PS:你实际使用的是什么 DBMS?
  • 我正在使用 SQLite。我正在尝试返回不存在于正整数序列中的最小正整数。例如如果序列是 2、6、7,则返回 3。如果序列是 1、2、3、4,则返回 5。如果序列是 3、4,则返回 2。
  • "如果序列是 2、6、7,则返回 3。" --- 为什么不是 1? “如果序列是 3、4,则返回 2” --- 为什么不是 1?
  • 我认为你需要这个:stackoverflow.com/questions/684106/…

标签: sql sqlite


【解决方案1】:
SELECT MAX(a) + CASE WHEN (5 IN (SELECT a FROM t)) THEN 1 ELSE 2 END AS max_plus_something FROM t

【讨论】:

    【解决方案2】:
    SELECT MAX(A) + MIN(CASE A WHEN 5 THEN 1 ELSE 2 END) AS NewA FROM T
    

    【讨论】:

      【解决方案3】:

      我没有机会测试很多案例,但我认为这可以做你想做的。

      declare @MinPosNI int;
      set @MinPosNI = 1;
      select @MinPosNI = case when (A - @MinPosNI) > 0 then @MinPosNI else A + 1 end from T     where A > 0 order by A 
      select @MinPosNI
      

      【讨论】:

        猜你喜欢
        • 2017-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 2013-06-10
        相关资源
        最近更新 更多