説明
この関数は、GROUP BY 句の拡張(例えば ROLLUP)によって生成されるスーパーグループ行と通常行の NULL 値を区別します。この関数は、スーパーグループ行の NULL 値に対して 1 を返し、通常行の値に対して 0 を返します。
構文
GROUPING(expr)
パラメータの説明
パラメータ expr は、GROUP BY 句内の式です。
戻り値の型
NUMBER データ型を返します。
例
テーブル tbl1 を作成し、データを挿入します。列 col2 と列 col3 でグループ化し、ROLLUP 句を使用して生成される集計行と通常のレコードを照会します。
obclient> CREATE TABLE tbl1(col1 INT,col2 INT,col3 INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES(1,NULL,NULL),(2,NULL,5),(3,1,6),(4,1,9),
(5,1,NULL),(6,2,3),(7,2,NULL),(8,2,18),(9,2,9),
(10,3,10),(11,3,12),(12,3,NULL);
Query OK, 12 rows affected
Records: 12 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM tbl1;
+------+------+------+
| COL1 | COL2 | COL3 |
+------+------+------+
| 1 | NULL | NULL |
| 2 | NULL | 5 |
| 3 | 1 | 6 |
| 4 | 1 | 9 |
| 5 | 1 | NULL |
| 6 | 2 | 3 |
| 7 | 2 | NULL |
| 8 | 2 | 18 |
| 9 | 2 | 9 |
| 10 | 3 | 10 |
| 11 | 3 | 12 |
| 12 | 3 | NULL |
+------+------+------+
12 rows in set
obclient> SELECT col2,col3,DECODE(GROUPING(col3),1,'Summary','Normal Record'),COUNT(*)
FROM tbl1
GROUP BY ROLLUP(col2,col3);
+------+------+--------------------------------------------------+----------+
| COL2 | COL3 | DECODE(GROUPING(COL3),1,'汇总','正常记录') | COUNT(*) |
+------+------+--------------------------------------------------+----------+
| 1 | 6 | 正常记录 | 1 |
| 1 | 9 | 正常记录 | 1 |
| 1 | NULL | 正常记录 | 1 |
| 1 | NULL | 汇总 | 3 |
| 2 | 3 | 正常记录 | 1 |
| 2 | 9 | 正常记录 | 1 |
| 2 | 18 | 正常记录 | 1 |
| 2 | NULL | 正常记录 | 1 |
| 2 | NULL | 汇总 | 4 |
| 3 | 10 | 正常记录 | 1 |
| 3 | 12 | 正常记录 | 1 |
| 3 | NULL | 正常记录 | 1 |
| 3 | NULL | 汇总 | 3 |
| NULL | 5 | 正常记录 | 1 |
| NULL | NULL | 正常记录 | 1 |
| NULL | NULL | 汇总 | 2 |
| NULL | NULL | 汇总 | 12 |
+------+------+--------------------------------------------------+----------+
17 rows in set