mysqlのサブクエリに関して|複数のテーブルを使用し条件に合うレコードを抽出したい
サブクエリを勉強してます。
■やりたいこと
売上の平均以上を達成した社員の名前を抽出したい
■分からないこと(迷っていること)
//売上平均の算出
//"select avg(sale) from sales";
//売上の平均以上を達成したsalesテーブルのレコードを抽出
//select * from sales where sale > (select avg(sale) from sales);
上記まではできました。がsalesのmember_idをもとに売上平均以上の社員名をsql文でどう書けば良いのかわかりません。
以下のようなsql文を考えましたが、そもそも書き方が間違ってますか?
select * from members where member_id =
(select member_id from sales where sale > select avg(sale) from sales);
■前提条件
salesテーブル
member_id|sale|month
---------+----+-----
1| 75| 4
2| 200| 5
3| 15| 6
4| 700| 5
5| 672| 4
6| 56| 8
7| 231| 9
8| 459| 8
9| 8| 7
10| 120| 4
売上合計:2,536
売上平均:253.6
membersテーブル
member_id|name
---------+--------
1|Tanaka
2|Sato
3|Suzuki
4|Tsuchiya
5|Yamada
6|Sasaki
7|Harada
8|Takahashi
9|Nishida
10|Nakada
ageテーブル
member_id|age
---------+--------
1|24
2|25
3|47
4|55
5|39
6|26
7|43
8|33
9|24
10|20
■phpコード
<?php
require_once('functions.php');
$dbh = connectDb();
$sql = "select * from members where member_id = (select member_id from sales order by sale desc limit 1)";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
//var_dump($rows);
foreach ($rows as $row) {
echo "1.最大の売上を出した社員の名前:".$row['name']."<br>";
}
//var_dump($row['name']);
// 2.売上の平均以上を達成した社員の名前の算出方法
// 売上平均の算出 $sql = "select avg(sale) from sales";
// 売上の平均以上を達成したsalesテーブルのレコードを抽出 select * from sales where sale > (select avg(sale) from sales);
$sql = "select avg(sale) from sales";
$stmt = $dbh->prepare($sql);
$stmt->execute();
$avg = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($avg);
echo "2.売上の平均以上を達成した社員の名前:"."<br>";
echo "1.30代以下の社員が達成した売上の合計:"."<br>";