アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL Serverで以下のようなテーブルからデータを取得しようと思っているのですが、うまく取得できません。
テーブル1 NEWS_TABLE
 ニュースID(NEWS_ID)と都道府県ID(PREF_ID)が100件格納されています。
テーブル2 PREF_TABLE
 都道府県ID(PREF_ID)と都道府県名(PREF_NAME)が格納されています。

ニュースの頻発するベスト4の都道府県をリストアップしたいのですが、以下のSQLだと問題なく取得できます。

SELECT
TOP 4
COUNT(A.NEWS_ID) AS COUNT
, A.PREF_ID
,(SELECT PREF_NAME FROM PREF_TABLE WHERE ID = A.PREF_ID) AS PREF_NAME
FROM
NEWS_TABLE AS A (NOLOCK)
WHERE A.NEWS_ID IN (1,2,3,4,5,6,7,8,9,10.....)
GROUP BY
A.PREF_ID
ORDER BY
COUNT DESC

ところが、以下だとエラーになってしまいます。

SELECT
TOP 4
COUNT(A.NEWS_ID) AS COUNT
, A.PREF_ID
,(SELECT PREF_NAME FROM PREF_TABLE WHERE ID = A.PREF_ID) AS PREF_NAME
FROM
NEWS_TABLE AS A (NOLOCK)
LEFT JOIN
PREF_TABLE AS B (NOLOCK)
ON
A.PREF_ID = B.PREF_ID
WHERE A.NEWS_ID IN (1,2,3,4,5,6,7,8,9,10.....)
GROUP BY
A.PREF_ID
ORDER BY
COUNT DESC

メッセージは以下
メッセージ 8120、レベル 16、状態 1、行 5
列 ****' は選択リスト内では無効です。この列は集計関数または GROUP BY 句に含まれていません。

2つ目の方が一般的のような気がするのですが、なぜエラーになるのか、2つ目の方法で解決策があるのか、教えて頂けないでしょうか?

A 回答 (1件)

とりあえずエラーメッセージでは 5行目を指摘しているので、



,(SELECT PREF_NAME FROM PREF_TABLE WHERE ID = A.PREF_ID) AS PREF_NAME

これを修正しましょう。そもそも、記述ミスですよね。

,B.ID AS PREF_NAME

と書きたかったのだと思いますが、これだとエラーでますか?
エラーになるなら Group by に追加しましょう。

GROUP BY
A.PREF_ID, B.ID
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A