バナー画像

SQLの「~以上」についてまとめています。

SQLの「~以上」を抽出するサンプルコード集

指定の数値以上を抽出するには「>=」

「以上」を指定するには、where条件文に「>=」を指定します。intやfloat型のほか、日付型のデータにも使用可能です。

select * from employees
where hire_date >= '1995-01-01'
limit 10;
+--------+------------+------------+-------------+--------+------------+
| emp_no | birth_date | first_name | last_name   | gender | hire_date  |
+--------+------------+------------+-------------+--------+------------+
|  10016 | 1961-05-02 | Kazuhito   | Cappelletti | M      | 1995-01-27 |
|  10019 | 1953-01-23 | Lillian    | Haddadi     | M      | 1999-04-30 |
|  10022 | 1952-07-08 | Shahaf     | Famili      | M      | 1995-08-22 |
|  10024 | 1958-09-05 | Suzette    | Pettey      | F      | 1997-05-19 |
|  10026 | 1953-04-03 | Yongqiao   | Berztiss    | M      | 1995-03-20 |
|  10054 | 1957-04-04 | Mayumi     | Schueller   | M      | 1995-03-13 |
|  10084 | 1960-05-25 | Tuval      | Kalloufi    | M      | 1995-12-15 |
|  10093 | 1964-06-11 | Sailaja    | Desikan     | M      | 1996-11-05 |
|  10105 | 1962-02-05 | Hironoby   | Piveteau    | M      | 1999-03-23 |
|  10120 | 1960-03-26 | Armond     | Fairtlough  | F      | 1996-07-06 |
+--------+------------+------------+-------------+--------+------------+
10 rows in set (0.00 sec)

平均値以上を抽出するには、avg()とサブクエリを組み合わせる

下記のサンプルは、employees(社員)テーブルとsalaries(給与)テーブルから、給与が平均値以上の社員のemp_no(社員番号)、first_name(姓名の名)、last_name(姓名の姓)、直近の給与(salary)を抽出しています。直近の給与は、to_dateに9999-01-01が指定されている前提です。

select employees.emp_no, first_name, last_name, salary from employees
left join salaries on employees.emp_no = salaries.emp_no and to_date='9999-01-01'
where salary >= ( select avg(salary) from salaries )
limit 10;

+--------+------------+-------------+--------+
| emp_no | first_name | last_name   | salary |
+--------+------------+-------------+--------+
|  10001 | Georgi     | Facello     |  88958 |
|  10002 | Bezalel    | Simmel      |  72527 |
|  10004 | Chirstian  | Koblick     |  74057 |
|  10005 | Kyoichi    | Maliniak    |  94692 |
|  10007 | Tzvetan    | Zielinski   |  88070 |
|  10009 | Sumant     | Peac        |  94409 |
|  10010 | Duangkaew  | Piveteau    |  80324 |
|  10013 | Eberhardt  | Terkki      |  68901 |
|  10016 | Kazuhito   | Cappelletti |  77935 |
|  10017 | Cristinel  | Bouloucos   |  99651 |
+--------+------------+-------------+--------+
10 rows in set (0.67 sec)

サブクエリで平均を出すためにテーブルフルスキャンを使用しているので、salariesのような件数の多いテーブルを対象にすると、クエリが遅くなります。salariesテーブルは280万件以上のデータが格納されています。

mysql> select count(*) from salaries;
+----------+
| count(*) |
+----------+
|  2844047 |
+----------+
1 row in set (0.88 sec)

~以上、~以下(範囲指定)を指定するには、between

範囲指定をするには、betweenを使います。下記の例では、雇用日(hire_date)が1990年1月1日以上(以降)、1991年1月1日以下(以前)のデータを抽出しています。

SELECT * FROM employees 
where hire_date between '1990-01-01' and '1991-01-01'
limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date  |
+--------+------------+------------+-----------+--------+------------+
|  10011 | 1953-11-07 | Mary       | Sluis     | F      | 1990-01-22 |
|  10032 | 1960-08-09 | Jeong      | Reistad   | F      | 1990-06-20 |
|  10037 | 1963-07-22 | Pradeep    | Makrucki  | M      | 1990-12-05 |
|  10043 | 1960-09-19 | Yishay     | Tzvieli   | M      | 1990-10-20 |
|  10050 | 1958-05-21 | Yinghua    | Dredge    | M      | 1990-12-25 |
|  10056 | 1961-09-01 | Brendon    | Bernini   | F      | 1990-02-01 |
|  10074 | 1955-08-28 | Mokhtar    | Bernatsky | F      | 1990-08-13 |
|  10077 | 1964-04-18 | Mona       | Azuma     | M      | 1990-03-02 |
|  10082 | 1963-09-09 | Parviz     | Lortz     | M      | 1990-01-03 |
|  10086 | 1962-11-19 | Somnath    | Foote     | M      | 1990-02-16 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.01 sec)

【関連記事】
SQL betweenで範囲指定するサンプルコード 速度アップにもつながる? 

まとめ

ポテパンダの一言メモ
  • 数値に「~以上」の条件を指定するには「>=」
  • 平均値以上を抽出するには、avg()とサブクエリを組み合わせる
  • betweenで~以上、~以下の範囲指定が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。