HAVING子句属性

时间:2011-03-15 20:23:29

标签: sql postgresql having

我需要帮助这个练习,我必须将英语属性翻译成sql。

问题:

  1. 长度至少有一个0

    Answer: MIN(ABS(length)) = 0
    
  2. 长度超过一个值

    Answer: MIN(length) < MAX(length)
    
  3. 长度

    没有空值
    Answer: COUNT(*) = COUNT(length)
    
  4. 长度值是正面还是负面

    Answer: MIN(length) * MAX(length) > 0
    
  5. 长度在零之上和之下的差异相同

    Answer: MIN(length) = -max(length)
    
  6. 所有长度值都不同

    Answer: COUNT(DISTINCT length) = COUNT(length)
    
  7. min(长度)或max(长度)中只有一个为正

    Answer: MIN(length) * MAX(length) < 0 
    
  8. 长度有一个值或空值

    Answer: MIN(length) = MAX(length)
    
  9. 这些是正确的吗?我不确定特别是#3,5,6和8。

2 个答案:

答案 0 :(得分:2)

  1. 长度至少有一个0

    Answer: MIN(ABS(length)) = 0
    
  2. 长度超过一个值

    Answer: MIN(length) < MAX(length)
    or
    Answer: COUNT(distinct length) > 1
    
  3. 长度

    没有空值
    Answer: COUNT(*) = COUNT(length)
    
  4. 长度值是正面还是负面

    Answer: MIN(length) * MAX(length) > 0
    or
    Better Answer: Sign(MIN(length)) * Sign(MAX(length)) > 0
    
    -- Because, with large values of length, multiplying two of them
    -- together can give you an overflow.
    
  5. 长度在零之上和之下的差异相同

    Answer: MIN(length) = -max(length)
    
  6. 所有长度值都不同

    Answer: COUNT(DISTINCT length) = COUNT(length)
    
  7. min(长度)或max(长度)中只有一个为正

    Maybe Wrong Answer: MIN(length) * MAX(length) < 0 (0 is not positive)
    or
    Answer: MIN(length) <= 0 and MAX(length) > 0
    
    -- IF: one must be positive and the other must be negative
    -- change <= 0 to < 0
    
  8. 长度有一个值或空值

    Wrong Answer: MIN(length) = MAX(length) -- null=null does not return true
    or
    Answer: COUNT(distinct length) <= 1
    

答案 1 :(得分:0)

我会质疑#2。您可能有两个相同的长度值。

对于#3,我不会使用HAVING子句来检查非空值。同样的事情#4。 HAVING 是根据标量值检查每行的等效性的正确位置。

#5可能有一些值得措辞的问题。你确定他们的意思是最小和最大而不是分配吗?

#8的措辞也很奇怪。 Null可以是length的值,也可以是没有值。这取决于查询的格式。此外,是否要求您不要使用AND等运算符。 OR

此外,对于大多数数据库平台,NULL被视为“未知”。由于它是未知的,因此无法检查其他值的等效性。如果你不知道Value1是什么,你就不可能知道它是否与Value2中的内容相同......