SAK 図書館

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

MySQL 編12 - 問い合わせ、集計、平均、最大、最小、重複、集合、複合

■集計問い合わせ(合計値)

  ・集計問い合わせを行うには、group by 句を使用する。
    この例では、key1 の先頭が「a」で始まる明細を key1 単位に集計(サマリー)
    し、data1 の合計が 10 以上のものを問い合わせる。
    having 句は、集計後の結果に対して抽出条件が指定できる。

select key1, sum(data1) from testm
  where key1 like 'a%'
  group by key1
  having sum(data1) >= 10
;

  ・count() を使用すると、合計件数が問い合わせられる。
    (問い合わせ件数表示、照会件数表示、抽出件数)
    この例では、key1 単位に集計し、data1 の合計が 10 以上のものを
    問い合わせる。

select key1, count(*), sum(data1) from testm
  group by key1
;

+------+----------+------------+
| key1 | count(*) | sum(data1) |
+------+----------+------------+
| a001 |        1 |          1 |
| a011 |        1 |          1 |
| b002 |        1 |         10 |
| c003 |        1 |        100 |
+------+----------+------------+

  ・単純に特定の明細のレコード件数を問い合わせるときは、次のように使用す
    る。この例では、key1 の先頭が「a」で始まる明細の件数が得られる。

select count(*) from testm
  where key1 like 'a%'
;

+----------+
| count(*) |
+----------+
|        2 |
+----------+

  ・avg を使用すると平均を問い合わせることができる。
    この例では、key1 毎の data1 の平均が得られる。

select key1, avg(data1) from testm
  group by key1
;

+------+------------+
| key1 | avg(data1) |
+------+------------+
| a001 |     1.0000 |
| a011 |     1.0000 |
| b002 |    10.0000 |
| c003 |   100.0000 |
+------+------------+

  ・max、min を使用すると最大値と最長値を問い合わせることができる。
    この例では、key1 毎の data1 の最大と最小が得られる。

select key1, max(data1), min(data1) from testm
  group by key1
;

+------+------------+------------+
| key1 | max(data1) | min(data1) |
+------+------------+------------+
| a001 |          1 |          1 |
| a011 |          1 |          1 |
| b002 |         10 |         10 |
| c003 |        100 |        100 |
+------+------------+------------+

■重複レコード除去(重複レコード削除)

  ・testm のキーがユニークでないと仮定すると、同じキーのレコードが複数
    存在する事になる。
    distinct を指定すると重複レコードを取り除いて問い合わせできる。
    distinct の代わりに unique と Oracle のように指定することはできない。
    (重複データ)

select distinct key1
  from testm
;

+------+
| key1 |
+------+
| a001 |
| a011 |
| b002 |
| c003 |
+------+

■集合問い合わせ

  ・union all を使用すると問い合わせ結果をマージできる。
    この例では、testm と testmsv の key1 の先頭が「a」で始まるものが問い
    合わされる。union all の代わりに union とだけ指定すると、重複レコード
    は含まれない。(表を合わせ、付け足す)

select * from testm
  where key1 like 'a%'
union all
select * from testmsv
  where key1 like 'a%'
;

select * from testm
  where key1 like 'a%'
union all
select * from testm
  where key1 like 'a%'
;

+------+-------+-------+-------+
| key1 | data1 | data2 | data3 |
+------+-------+-------+-------+
| a001 |     1 |     2 |     3 |
| a011 |     1 |     2 |     3 |
| a001 |     1 |     2 |     3 |
| a011 |     1 |     2 |     3 |
+------+-------+-------+-------+

select * from testm
  where key1 like 'a%'
union
select * from testm
  where key1 like 'a%'
;

+------+-------+-------+-------+
| key1 | data1 | data2 | data3 |
+------+-------+-------+-------+
| a001 |     1 |     2 |     3 |
| a011 |     1 |     2 |     3 |
+------+-------+-------+-------+

■集合差問い合わせ

  ・minus、minus all は、MySQL では使用できない。

■集合結合問い合わせ

  ・intersect は、MySQL では使用できない。

■複合問い合わせ

  ・in、any などを使用した複合問い合わせは、MySQL ではサポートされていな
    いようである。そもそも副問い合わせがエラーになってしまう。

■MySQL 編資料
■PostgreSQL 編、JAVA Servlet、JSP 編資料
■SQL 基礎編資料
■SQL 基礎実地編資料
■SQL チューニング編資料
■Oracle PL/SQL 編資料
| VB | SQL | Perl | PHP | ASP | JSP | C | PC | HP | FAQ | フリーソフト |

SAK Streets メインストリート 図書館・カフェ 一覧 SAK Streets 検索



Copyright (C) 1999-2017 Y.SAK