リレーショナルデータベース(8):MySQLのORDERBY句とGROUPBY句

選別

読み取ったデータを並べ替える必要がある場合は、MySQLの ORDER BY 句を使用して、並べ替えるフィールドをどの方法で並べ替えるかを設定し、検索結果を返すことができます。

文法

# SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
  • 任意のフィールドを並べ替え条件として使用して、並べ替えられたクエリ結果を返すことができます。
  • 複数のフィールドを設定して並べ替えることができます。
  • ASCまたはDESCキーワードを使用して、クエリ結果を昇順または降順でソートするように設定できます。デフォルトでは、昇順です。
  • WHERE...LIKE句を追加して条件を設定できます。

コマンドプロンプトでORDERBY句を使用する

# 以下将在 SQL SELECT 语句中使用 ORDER BY 子句来读取MySQL 数据表 hanscal_tb 中的数据:
# 结果将按降序排列
mysql> use hanscal; 
mysql> SELECT * from hanscal_tb ORDER BY submission_date ASC; 

# 读取 hanscal_tb 表中所有数据并按 submission_date 字段的升序排列。
mysql> SELECT * from hanscal_tb ORDER BY submission_date DESC;

グループ化

GROUP BYステートメントは、1つ以上の列に基づいて結果セットをグループ化します。グループ化された列でCOUNT、SUM、AVGなどの関数を使用できます。

GROUPBY構文

SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

この章の例では、次のテーブル構造とデータを使用しています。使用する前に、データベースのデータを確認してください。

mysql> set names utf8;
 mysql> SELECT * FROM employee_tbl; 
+ ---- + -------- + ---------------------- ----------- + -------- + 
|id|名前|日付|サインイン| 
+---- + -------- + ----- ------------ ---- + ------- + 
| 1 | Xiao Ming | 2016-04-22 15:25:33 | 1 | 
| 2 | Xiao Wang | 2016-04-20 15:25:47 | 3 | 
| 3 | Xiao Li | 2016-04-19 15:26:02 | 2 | 
| 4 | Xiao Wang | 2016-04-07 15:26:14 | 4 | 
| 5 | Xiao Ming |:26:40 | 4 | 
| 6 | Xiao Ming | 2016-04-04 15:26:54 | 2 | 
+ ---- + -------- +- -------- ------------- + -------- + 
6行セット(0.00秒)

GROUP BYステートメントを使用して、データテーブルを名前でグループ化し、デフォルトで昇順で各人が持っているレコードの数をカウントします。

mysql> SELECT name、COUNT(*)FROM employee_tbl GROUP BY name; 
+ -------- + ---------- + 
| name | COUNT(*)| 
+ ----- --- + ------------ + 
| Xiao Li | 1 | 
| Xiao Ming | 3 | 
| Xiao Wang | 2 | 
+ -------- + ----- ----+
セット内の3行(0.01秒)

WITHROLLUP構文

WITH ROLLUPは、グループ化された統計に基づいて同じ統計(SUM、AVG、COUNT ...)を実装できます。

上記のデータテーブルを名前でグループ化し、各人がログインした回数を数えます。

mysql> SELECT name、SUM(signin)as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP; 
+ -------- + -------------- + 
| 名前| signin_count | 
+ -------- + -------------- + 
| 小丽| 2 | 
| 小明| 7 | 
| 小王| 7 | 
| NULL | 16 | 
+ -------- + -------------- + 
4行セット(0.00秒)

レコードNULLは、全員のログイン数を表します

合体構文

合体を使用して、NULLを置き換えることができる名前を設定できます。合体構文は次のとおりです。

select coalesce(a,b,c);

パラメータの説明:a == nullの場合はbを選択し、b == nullの場合はcを選択し、a!= nullの場合はaを選択し、abcがnullの場合はnullを返します(意味がありません)。

次の例では、名前が空の場合、代わりに合計を使用します。

mysql> SELECT Coalesce(name、'total')、SUM(signin)as signin_count FROM employee_tbl GROUP BY name WITH ROLLUP; 
+ ------------- --- + ------ -------- + 
| colesce(name、'total')| signin_count | 
+ ------------------ -------- +- ------------ + 
| Xiao Li | 2 | 
| Xiao Ming | 7 | 
| Xiao Wang | 7||
合計|16| 
+ --- ---------- --- + -------------- + 
4行セット(0.01秒)

NULL値の処理

MySQLはSQLSELECTコマンドとWHERE句を使用してデータテーブルのデータを読み取りますが、指定されたクエリ条件フィールドがNULLの場合、コマンドが正しく機能しない可能性があります。

この状況を処理するために、MySQLは3つの主要な演算子を提供します。

  • IS NULL: この演算子は、列の値がNULLの場合にtrueを返します。
  • IS NOT NULL: 列の値がNULLでない場合、演算子はtrueを返します。
  • <=>: 比較演算子(=演算子とは異なります)は、比較される2つの値が等しいか、両方がNULLの場合にtrueを返します。

NULLの条件付き比較操作は特別です。= NULLまたは!= NULLを使用して、列内のNULL値を検索することはできませMySQLでは、NULL値を他の値(NULLであっても)と比較すると、常にNULLが返されます。つまり、NULL=NULLはNULLを返します。NULLは、 ISNULLおよびISNOTNULL演算子を使用してMySQLで処理されます。

# 查找数据表hanscal_tb中hanscal_count列是否为NULL,必须使用 IS NULL 和 IS NOT NULL:

mysql> SELECT * FROM hanscal_tb WHERE hanscal_count IS NULL; 

ifnull関数

# columnName1,columnName2 为 int 型,
# 当 columnName2 中有值为 null 时,columnName1+columnName2=null,
# ifnull(columnName2,0) 把 columnName2 中 null 值转为 0。

select * , columnName1+ifnull(columnName2,0) from tableName;

おすすめ

転載: blog.csdn.net/weixin_43145427/article/details/124166146