3

テーブル「本」があります。簡単にするために、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
  )

2番目の部分だけを書くと:

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

正しい値を返します (5)

条件付きで1部だけ書けばOK= 5です。

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

私は何を間違っていますか?

4

2 に答える 2

7

2 番目のクエリは括弧で囲む必要があります

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
  )
)
于 2012-09-06T00:06:29.813 に答える
3

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 が maximum で同点の場合[Number of new books]、このクエリはすべての同点を返すことに注意してください。(ただし、元のアプローチも同様です。)これらの関係の 1 つだけが必要な場合は、一意のフィールド(主キーなど)をORDER BY.

于 2012-09-06T01:05:53.610 に答える