2

我需要这个练习的帮助,我必须将属性从英语翻译成 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(length) 或 max(length) 中只有一个是正数

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

    Answer: MIN(length) = MAX(length)
    

这些是正确的吗?我不确定#3、5、6 和 8。

4

2 回答 2

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(length) 或 max(length) 中只有一个是正数

    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
    
于 2011-03-15T20:56:29.493 回答
0

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

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

#5 可能有一些值得一提的问题。您确定它们是指最小值和最大值而不是分布吗?

#8 的措辞也很奇怪。Null 可能是长度的值,也可能是没有值。这取决于查询的格式。另外,是否要求您不使用AND&之类的运算符OR

此外,对于大多数数据库平台,NULL 被视为“未知”。由于它是未知的,因此无法检查它是否与另一个值等效。如果你不知道是什么Value1,你不可能知道它是否和里面的一样Value2……

于 2011-03-15T20:35:27.617 回答