2

SQLの初心者は、CASE条件付き操作を行うために使用しようとしています。

MangaTableタイトル、作者など、いくつかのマンガ(コミック)の詳細を含むテーブルがあります。作者GROUPに、このようなタイトルがいくつあるかを確認しようとしています。

SELECT AUTHOR, COUNT(AUTHOR) FROM MANGATABLE GROUP BY AUTHOR

私は次のようなデータを取得しました:

"Masashi Kishimoto" | 1
"Eiichiro Oda"      | 1
"Tsugumi Ohba"      | 1
"Kubo Tite"         | 2

しかし、数字の代わりに「単一」または「複数」を表示したいと思います。私はこれを試しました:

SELECT AUTHOR, COUNT(AUTHOR) AS CAL, CASE WHEN CAL>1 THEN 'MULTIPLE' ELSE 'SINGLE' END FROM MANGATABLE GROUP BY AUTHOR

しかし、エラーが発生します:column "cal" does not exist

ご意見をお聞かせください。

4

4 に答える 4

4

ALIASクエリの同じレベルで作成されたものを使用することはできません。

SELECT AUTHOR, COUNT(AUTHOR) AS CAL, 
       CASE WHEN COUNT(AUTHOR)>1 THEN 'MULTIPLE' ELSE 'SINGLE' END 
FROM MANGATABLE 
GROUP BY AUTHOR

操作の順序は次のとおりです。

  • FROM句
  • WHERE句
  • GROUPBY句
  • HAVING句
  • SELECT句
  • ORDERBY句

エイリアスはSELECT句に作成されるため、使用できません。

于 2013-03-22T10:01:38.160 に答える
1

選択リスト内のエイリアスで選択リスト内の式を参照することはできません。次のように変更すると機能します。

SELECT AUTHOR, 
       COUNT(AUTHOR) AS CAL, 
       CASE WHEN COUNT(AUTHOR)>1 THEN 'MULTIPLE' ELSE 'SINGLE' END AS AUTHOR_TYPE
FROM MANGATABLE
GROUP BY AUTHOR

式をもう一度繰り返さなければならないのは残念です。これはSQLの欠点の1つです。

WITH式を使用して一般的な部分を除外することで、これを回避できる場合があります。

(はい、case式のエイリアスを指定することで列見出しを変更できます-私はそれを追加しました。)

于 2013-03-22T10:01:49.563 に答える
0

小さな変更のみが必要です。以下を参照してください

SELECT 
    AUTHOR, 
    COUNT(AUTHOR) AS CAL, 
    CASE WHEN COUNT(AUTHOR) THEN 'MULTIPLE' ELSE 'SINGLE' END     
FROM MANGATABLE GROUP BY AUTHOR
于 2013-03-22T10:01:36.777 に答える
0

一時テーブルを使用する

SELECT CASE z.CAL WHEN 1 THEN 'MULTIPLE' ELSE 'SINGLE' END FROM (SELECT AUTHOR, 
COUNT(AUTHOR) AS CAL  FROM MANGATABLE GROUP BY AUTHOR) as z

修正

    SELECT (CASE WHEN z.CAL > 1 THEN 'MULTIPLE' ELSE 'SINGLE' END) as test FROM (SELECT AUTHOR, 
COUNT(AUTHOR) AS CAL  FROM MANGATABLE GROUP BY AUTHOR) as z
于 2013-03-22T10:09:57.677 に答える