すいません。教えてください。
emp表からJobのデータが何種類あるか出力したいとき、

・ select count(distinct job) from emp;

はいいのに、

・ select count(job) from emp group by job;

がエラーになる理由を知っている方、教えてください。

A 回答 (3件)

group by句はグループ化したい列に適用します。


ご質問の内容でSQL文を作成すると
select job,count(*) job_count from emp group by job;
となります。

結果は
job     job_count
PRESIDENT      1
MANAGER       10
CLEAK        20
の様になります(数字は適当です)。
    • good
    • 0
この回答へのお礼

なるほど、group by句で指定した内容と、select句で選択した
内容が同じでないからエラーになるんですね。
よくわかりました。ありがとうございました。

お礼日時:2001/12/27 11:36

No.2のteppyです


すいません間違えました
>select job, count(job) from emp group by job, count(job);

select job, count(job) from emp group by job;

No.1のsghさんのSQL文が正しいです
    • good
    • 0
この回答へのお礼

よくわかりました。
ありがとうございました。

お礼日時:2001/12/27 11:38

group by句は出力したい項目をグループ化するところです


出力されない項目をグループ化することは出来ませんので、エラーがでます

>select count(job) from emp group by job;

select count(job) from emp group by count(job);
とすれば、正常に出力されるでしょう

>emp表からJobのデータが何種類あるか出力したいとき、
だったら、下記のほうが宜しいかと...
select job, count(job) from emp group by job, count(job);
    • good
    • 0

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QGROUP BYを使用したCOUNT

いつもお世話になっております。

現在下記のようなSQLを発行していまして、
件数を取得したいのですが、取得データの結果が
0件以外の時は良いのですが、0件の時は
「レコードが選択されませんでした」と表示されてしまいます。
何とか0件で表示できないでしょうか?

SELECT COUNT(*) FROM T_M_MAKER
HAVING MAKER_CD = '010'
GROUP BY MAKER_CD

苦し紛れに
SELECT DECODE(COUNT(*),'',0,COUNT(*)) FROM T_M_MAKER
HAVING MAKER_CD = '010'
GROUP BY MAKER_CD

というのもやってみましたが、結果は一緒でした。
どなたかお分かりになる方、回答をお願いします。

Aベストアンサー

こんにちわ。

RDBMS の種類が不明ですが、Oracle であれば
インライン・ビューで解決できます。
Select count(*) from (select ~ from T_M_MAKER
 group by ~ having ~);

Qgroup by でselect

社員テーブルがありまして、同じ苗字の人がどれぐらいいるのかを取得しようとしています。

select mi,na,count(mi) from shain group by mi

これで下のような結果を得るつもりが

青木 章太 2 ←青木が2人いたということ
青木 健吾 2 ←青木が2人いたということ
石田 雄人 5 ←石田が5人いたということ
・・・

下のようなエラーになりました。どうしたらよいでしょうか?
mi,na,count(mi) の3項目を得るのは必須です。

Microsoft OLE DB Provider for ODBC Drivers エラー '80040e14'
[Microsoft][ODBC Microsoft Access Driver] 集計関数の一部として指定された式 'na' を含んでいないクエリを実行しようとしました。

Aベストアンサー

Selectで記述した項目はGroup byでも必要。

select mi,na,count(mi) from shain group by mi,na

select mi&na,count(mi) from shain group by mi&na
の方が「わかりやすい」という意味で適切かも。

QDISTINCT + COUNT

みなさんこんにちは。

以下のようなSQL文のCOUNT関数を作りたいのですが、
うまい手法がわからず困っています。

SELECT DISTINCT Ta.会員ID, Tb.品番
FROM TABLE_A AS Ta LEFT JOIN
TABLE_B AS Tb ON Ta.ID = Tb.ID

↑こいつのCOUNTですが、単純に
SELECT COUNT(DISTINCT Ta.会員ID, Tb.品番) ~
とやるとエラーになってしまいます。

どうやってやればカウントできるのでしょうか?
すごく初歩的なことだと思いますが、
ご助言お願いいたします。

Aベストアンサー

DBの種類は?

SELECT COUNT(*) FROM
(
SELECT DISTINCT Ta.会員ID, Tb.品番
FROM TABLE_A AS Ta LEFT JOIN
TABLE_B AS Tb ON Ta.ID = Tb.ID
)

これがOKかNGかはDBによります。

QSELECT DISTINCT の使いかた

テーブル名にA1,A2,A3と言う列がありA1内の列の重複を省き
結果をA1,A2,A3全て表示したいのですが方法がわかりません。
どなたかHELP お願いします。

SELECT DISTINCT A1 FROM テーブル

Aベストアンサー

もうひとつはっきりやりたいことが分からないのですが、DISTINCTは、組み合わせで重複しているものを取り除くのですが、いったいどうゆうことをするのでしょうか?

A1 A2 A3
1 A α
1 A β
2 A α
1 A α

SELECT DISTINCT A1,A2,A3 FROM テーブル

A1 A2 A3
1 A α
1 A β
2 A α
(4行目が1行目と重複しているので、表示されない)

補足お願いします。

QSelect Distinct の使い方

【Access 2013 VBA / SQL】

[親Table]
*ID1
*日付
*受注元会社名

{子Table ]
*ID2(主キー)
*ID1(親テーブルのID)
*ID3(外部キー)

[Table B]
*ID3
*会社名

------------------------------
ID2  ID1    会社ID
------------------------------
1    1     A
2    1     B
3    1     B
4    1     C
5    2     B
6    2     A
7    2     A
------------------------------

ID1=1のもので、会社IDを一意にして選択した会社名を表示したい
この時、SQLでどのように書けばよいでしょうか

Aベストアンサー

会社名だけならもっとシンプルに出せるかと思います。

SELECT [Table B].会社名
FROM [Table B]
WHERE EXISTS (
SELECT 0
FROM [子Table]
WHERE [子Table].ID3 = [Table B].ID3
AND [子Table].ID1 = 1
);


人気Q&Aランキング

おすすめ情報