DB2 演習 サンプル解答 ================== ■2. 基本照会 - 集合関数を使った照会 --2-1. 商品表(product)から、標準単価(cost)の合計、平均、最小値、最大値を照会してください。 SELECT sum(cost), avg(cost), min(cost), max(cost) FROM product ; 1 2 3 4 --------------------------------- --------------------------------- ----------- ----------- 196700.00 19670.000000000000000000000000 5800.00 56000.00 1 レコードが選択されました。 --2-2. 商品表(product)から、限界割引率(discount)の個数、合計、平均、最小値、最大値を照会してください。 SELECT count(discount), sum(discount), avg(discount), min(discount), max(discount) FROM product ; 1 2 3 4 5 ----------- --------------------------------- --------------------------------- ----------- ----------- 7 5.40 0.771428571428571428571428 0.70 0.80 1 レコードが選択されました。 --2-3.商品表(product)から、限界割引率(discount)の個数、重複を排除した個数、商品表(product)の行数を照会してください。 SELECT count(discount), count(DISTINCT discount), count(*) FROM product ; 1 2 3 ----------- ----------- ----------- 7 2 10 1 レコードが選択されました。 --2-4. 商品表(product)から、限界割引率(discount)の種類の個数を照会してください。 SELECT count(DISTINCT discount) FROM product ; 1 ----------- 2 1 レコードが選択されました。 --2-5. 売上表(packedsales)から、売上日付(psales_date)が5月の売上件数を数えてください。 SELECT count(*) FROM packedsales WHERE month(psales_date) = 5 ; 1 ----------- 8 1 レコードが選択されました。 --2-6. 商品表(product)から、限界割引率(discount)ごとに、その個数、合計、平均、最小値、最大値を照会してください。 SELECT discount, count(discount), sum(discount), avg(discount), min(discount), max(discount) FROM product GROUP BY discount ; DISCOUNT 2 3 4 5 6 ----------- ----------- --------------------------------- --------------------------------- ----------- ----------- 0.70 2 1.40 0.700000000000000000000000 0.70 0.70 0.80 5 4.00 0.800000000000000000000000 0.80 0.80 - 0 - - - - 3 レコードが選択されました。 --2-7. 商品表(product)から、限界割引率(discount)ごとに、その個数、合計、平均、最小値、最大値を照会してください。このとき、限界割引率(discount)で分類したときの行数が5行に満たないものは省いてください。 SELECT discount, count(discount), sum(discount), avg(discount), min(discount), max(discount) FROM product GROUP BY discount HAVING count(discount) >= 5 ; DISCOUNT 2 3 4 5 6 ----------- ----------- --------------------------------- --------------------------------- ----------- ----------- 0.80 5 4.00 0.800000000000000000000000 0.80 0.80 1 レコードが選択されました。 --2-8. 商品表(product)から、限界割引率(discount)ごとに、その個数、合計、平均、最小値、最大値を照会してください。このとき、標準単価(cost)が15000円以上のものだけを対象にします。 SELECT discount, count(discount), sum(discount), avg(discount), min(discount), max(discount) FROM product WHERE cost >= 15000 GROUP BY discount ; DISCOUNT 2 3 4 5 6 ----------- ----------- --------------------------------- --------------------------------- ----------- ----------- 0.70 2 1.40 0.700000000000000000000000 0.70 0.70 0.80 3 2.40 0.800000000000000000000000 0.80 0.80 2 レコードが選択されました。 --2-9. 売上表(packedsales)から、担当者ID(emp_id)毎の売上合計金額(total)の平均を表示してください。 SELECT emp_id, avg(total) FROM packedsales GROUP BY emp_id ; EMP_ID 2 ----------- --------------------------------- 1 50000.000000000000000000000000 2 87500.000000000000000000000000 3 31764.705882352941176470588235 4 26111.111111111111111111111111 5 29571.428571428571428571428571 5 レコードが選択されました。 --2-10. 売上明細表(sales)から、商品ID(prod_id)ごとの売価(price)の合計が50万円以上の数量(quantity)の合計と売価(price)の合計を表示してください。 SELECT prod_id, sum(quantity), sum(price) FROM sales GROUP BY prod_id HAVING sum(price) >= 500000 ; PROD_ID 2 3 ----------- --------------------------------- --------------------------------- 103 19.00 510000.00 104 13.00 540000.00 106 35.00 900000.00 3 レコードが選択されました。 --2-11. 売上表(packedsales)の売上日(psales_date)ごとに売上合計金額(total)の合計値を集計し、合計値の多いものから順に売上日(psales_date)と合計値を表示してください。 SELECT psales_date, sum(total) FROM packedsales GROUP BY psales_date ORDER BY 2 DESC ; PSALES_DATE 2 ----------- --------------------------------- 2001-07-18 421000.00 1999-03-18 220000.00 1995-12-18 205000.00 1994-08-18 175000.00 : (中略) 2001-07-14 20000.00 43 レコードが選択されました。