【问题标题】:SELECT does not return numeric valueSELECT 不返回数值
【发布时间】:2012-08-30 18:11:53
【问题描述】:

我有一张桌子“书”。为简单起见,这里有 3 列:

name(text) | new(boolean) | press(text) 

我需要选择新书最多的出版社(出版社)。 我不明白为什么 Access 显示“语法错误”。

SELECT press, COUNT(new) AS [Number of new books]
FROM books
WHERE new = TRUE
GROUP BY press
HAVING COUNT(new) = 
  SELECT MAX(s) 
  FROM 
  (   SELECT COUNT(new) AS s, press 
      FROM books
      WHERE new = TRUE
      GROUP BY press
  )

如果我只写第二部分:

  SELECT MAX(s) 
  FROM 
  (   SELECT COUNT(new) AS s, press 
      FROM books
      WHERE new = TRUE
      GROUP BY press
  )

它返回正确的值(5)

如果我只写第一部分的条件= 5,那很好。

SELECT press, COUNT(new) AS [Number of new books]
FROM books
WHERE new = TRUE
GROUP BY press
HAVING COUNT(new) = 5

我做错了什么?

【问题讨论】:

    标签: sql ms-access select group-by


    【解决方案1】:

    第二个查询应该用括号括起来

    SELECT press, COUNT(new) AS [Number of new books]
    FROM books
    WHERE new = TRUE
    GROUP BY press
    HAVING COUNT(new) = 
    (
      SELECT MAX(s) 
      FROM 
      (   SELECT COUNT(new) AS s, press 
          FROM books
          WHERE new = TRUE
          GROUP BY press
      )
    )
    

    【讨论】:

      【解决方案2】:

      您已经有一个聚合 (GROUP BY) 查询,该查询返回每个 press 的新书数量。将其用作子查询并在按计数降序排序后获取TOP 1 行。

      SELECT TOP 1
          sub.press,
          sub.CountOfNew AS [Number of new books]
      FROM
          (
              SELECT
                  press,
                  COUNT(*) AS CountOfNew
              FROM books
              WHERE [new] = TRUE
              GROUP BY press
          ) AS sub
      ORDER BY sub.CountOfNew DESC
      

      注意,如果多个presses 与最大[Number of new books] 绑定,则此查询将返回所有绑定。 (但您的原始方法也是如此。)如果您只想要其中一个关系,请在 ORDER BY 中包含一个唯一字段(例如主键)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-25
        • 2014-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多