1. ホーム
  2. sql-server

[解決済み] 列「集約関数またはGROUP BY句に含まれていないため、選択リストでは無効です」。

2023-01-08 22:50:32

質問

カラムを表示したい B を表示したいのですが、クエリに追加すると以下のエラーが発生します。

列T2.B' は、集約関数にも GROUP BY 節にも含まれていないため、選択リストでは無効です。 集約関数または GROUP BY 句のいずれにも含まれていないため、select list では無効です。

私のコードです。

SELECT A, COUNT(B) as T1, B 
FROM T2 
WHERE ID=1 
GROUP BY A 

どのように解決するのですか?

言い換えると、このエラーは、SQL Server が以下のことを知らないことを告げているのです。 どの B をグループから選択する。

特定の1つの値を選択したい場合(例えば MIN , SUM または AVG を含む)その場合は適切な集約関数を使うか、あるいはすべての値を新しい行として選択したい(つまり B の中に GROUP BY のフィールドリスト)。


次のようなデータを考えてみましょう。

ID A B
1 1 13
1 1 79
1 2 13
1 2 13
1 2 42

クエリ

SELECT A, COUNT(B) AS T1 
FROM T2 
GROUP BY A

は返すだろう。

A T1
1 2
2 3

というのは、すべてうまくいっています。

しかし、次のような(不正な)クエリを考えてみてください、これはこのエラーを発生させます。

SELECT A, COUNT(B) AS T1, B 
FROM T2 
GROUP BY A

そして、その返されたデータセットが問題を示しています。

A T1 B
1 2 13? 79? 13と79の両方が別の行として?(13+79=92)? ...?
2 3 13? 42? ...?


しかし、次の2つのクエリでは、このことは明らかであり、エラーは発生しません。

  1. 集約を使用する

    SELECT A, COUNT(B) AS T1, SUM(B) AS B
    FROM T2
    GROUP BY A
    
    

    は返すだろう。

    A T1 B
    1 2 92
    2 3 68
    
    
  2. カラムを追加して GROUP BY リスト

    SELECT A, COUNT(B) AS T1, B
    FROM T2
    GROUP BY A, B
    
    

    は返すだろう。

    A T1 B
    1 1 13
    1 1 79
    2 2 13
    2 1 42