質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

15730閲覧

SQLのGROUP BYを使ったサブクエリの仕方について

退会済みユーザー

退会済みユーザー

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/05/23 07:21

編集2017/05/24 02:29

emp表から、部門コード、部門の平均給与、部門別の社員数、給与が部門の平均給与以上の社員数を部門コードの昇順で求めるには、どう記述すればいいでしょうか?ご教授お願いします。

部門コード 部門の平均給与 部門の社員数 平均給与以上の社員数


10 2916.66 3 1 20 2175 5 3 30 1566.66 6 2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

PostgreSQLで作成

sql

1 2select bumon 部門, 3avg(kyuyo) 部門の平均給与, 4count(*) 部門の社員数, 5sum(case when kyuyo>heikin then 1 else 0 end) 平均給与以上の社員数 6from emp join (select bumon, avg(kyuyo) heikin from emp group by 1) ave using(bumon) 7 group by 1 order by 1 ; 8 9select emp.bumon 部門, 10avg(kyuyo) 部門の平均給与, 11count(*) 部門の社員数, 12count(heikin) 平均給与以上の社員数 13from emp left join (select bumon, avg(kyuyo) heikin from emp group by 1) ave on ave.bumon=emp.bumon and emp.kyuyo>heikin 14group by 1 order by 1 ; 15

部門 | 部門の平均給与 | 部門の社員数 | 平均給与以上の社員数
------+---------------------+--------------+----------------------
10 | 287500.000000000000 | 8 | 3
20 | 305000.000000000000 | 6 | 2
30 | 292857.142857142857 | 7 | 4
(3 rows)

投稿2017/05/23 12:32

編集2017/05/23 12:54
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

MySQLで簡単に作ってみました。こんな感じで如何でしょうか?

テーブル定義

SQL

1-- 2-- テーブルの構造 `emp` 3-- 4 5CREATE TABLE `emp` ( 6 `id` int(11) NOT NULL, 7 `dep` varchar(1) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 8 `salary` int(11) NOT NULL 9) ENGINE=InnoDB DEFAULT CHARSET=latin1; 10 11-- 12-- テーブルのデータのダンプ `emp` 13-- 14 15INSERT INTO `emp` (`id`, `dep`, `salary`) VALUES 16(1, 'A', 1000), 17(2, 'A', 2000), 18(3, 'A', 1500), 19(4, 'A', 2000), 20(5, 'B', 2000), 21(6, 'B', 3000), 22(7, 'B', 3000), 23(8, 'C', 1000), 24(9, 'C', 1200), 25(10, 'C', 4000), 26(11, 'C', 2000), 27(12, 'A', 1700); 28

抽出するSQL

SQL

1SELECT emp.dep,count(id),average 2from emp 3JOIN 4(SELECT dep, AVG(salary) as average from emp GROUP by dep) as av on emp.dep = av.dep 5 WHERE emp.salary > av.average 6 GROUP by emp.dep 7 ORDER BY emp.dep

投稿2017/05/23 07:44

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

emp表自体が提示されていないのでなんといえませんが
とりあえずgroup by 部門コードしてください

  • 平均はsum(給与)/count(*)
  • 社員数はcount(*)
  • 平均以上の社員はsum(case when sum(給与)/count(*)>給与 then 1 else 0 end)

のようなやり方になります。あとはSQLの種類によって
じゃっかん書き方がかわってくると思います

修正します

構文が間違っていたようです、以下修正します

SQL

1create table employees(user_id int unique,department_id int,salary int); 2insert into employees values 3(1001,10,250000),(1002,10,270000),(1003,10,280000),(2001,20,300000),(2002,20,220000),(3001,30,250000); 4

集計

select t1.department_id ,avg(salary) as avg ,sum(case when t1.salary>t2.avg then 1 else 0 end) avg_up from employees as t1 inner join (select department_id ,avg(salary) as avg from employees group by department_id ) as t2 on t1.department_id=t2.department_id group by department_id

投稿2017/05/23 07:29

編集2017/05/23 08:10
yambejp

総合スコア114747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/05/23 07:43

select department_id ,sum(salary)/count(*) ,sum(case when sum(salary)/count(*)> salary then 1 else 0 end) from employees group by department_id; と記述したところ、単一グループのグループ関数ではありません。とエラーが出ました。。 select句には集計関数とdepartment_idが入っているのにどうしてエラーが出るのかもわかりません。。 SQLはORACLE SQLです。
yambejp

2017/05/23 08:10

ちょっと間違ってました、追記しておきます
yambejp

2017/05/24 08:01

退会するくらいなら質問を締めていけばいいのに・・・と思いました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問