このトピックでは、ユーザー定義集計関数 (UDAF) について説明します。
UDAF
SUM: 中間値を集計し、値の合計を返します。
AVG: 中間値を集計し、値の平均を返します。
MAX: 中間値を集計し、最大値を返します。
MIN: 中間値を集計し、最小値を返します。
COUNT: 中間値を集計し、エントリ数を返します。
MAXLABEL: 中間値を集計し、指定されたラベルの最大値を返します。
例
テストデータ
このトピックのサンプルクエリは、テスト環境のphoneテーブルで実行されます。phoneテーブルには、特定の人気ブランドの携帯電話に関する情報が格納されています。次の表は、phoneテーブルに格納されているデータを示しています。
nid | タイトル | 価格 | ブランド | サイズ | 色 |
1 | Huawei Mate 9 Kirin 960 Chip Leica Dual Lens | 3599 | Huawei | 5.9 | Red |
2 | Huawei P10 Plus Unlocked Mobile Phone | 4388 | Huawei | 5.5 | Blue |
3 | Xiaomi Redmi Mobile Phone 4X 32 GB Unlocked 4G Smartphone | 899 | Xiaomi | 5.0 | Black |
4 | OPPO R11 Unlocked 20 Megapixel Front and Rear Cameras Fingerprint Identification Camera Phone r11r9s | 2999 | OPPO | 5.5 | Red |
5 | MEIZU Meilan E2 Unlocked Front Fingerprint Fast Charging 4G Smartphone | 1299 | Meizu | 5.5 | Silvery white |
6 | Nokia 105 Mobile Loud Phone for Seniors Straight Button Students Old People Small Mobile Phone Super Long Standby | 169 | Nokia | 1.4 | Blue |
7 | Apple iPhone 6s 32 GB Unbroken Seal Genuine Spot Goods Quick Delivery | 3599 | Apple | 4.7 | Silvery white |
8 | Apple iPhone 7 Plus 128 GB Unlocked 4G Mobile Phone | 5998 | Apple | 5.5 | Bright black |
9 | Apple iPhone 7 32 GB Unlocked 4G Smartphone | 4298 | Apple | 4.7 | Black |
10 | Samsung GALAXY S8 SM-G9500 Unlocked 4G Mobile Phone | 5688 | Samsung | 5.6 | Fog blue |
サンプルクエリ
● phoneテーブルの全データをクエリする
SELECT * FROM phone ORDER BY nid LIMIT 1000 USE_TIME: 0.036, ROW_COUNT: 10
------------------------------- TABLE INFO ---------------------------
nid | title | price | brand | size | color |
1 | null | 3599 | Huawei | 5.9 | null |
2 | null | 4388 | Huawei | 5.5 | null |
3 | null | 899 | Xiaomi | 5 | null |
4 | null | 2999 | OPPO | 5.5 | null |
5 | null | 1299 | Meizu | 5.5 | null |
6 | null | 169 | Nokia | 1.4 | null |
7 | null | 3599 | Apple | 4.7 | null |
8 | null | 5998 | Apple | 5.5 | null |
9 | null | 4298 | Apple | 4.7 | null |
10 | null | 5688 | Samsung | 5.6 | null |注: titleフィールドとcolorフィールドは概要に含まれているため、システムはクエリ結果でこれらのフィールドの値としてnullを返します。
sum関数を使用して、各ブランドの商品価格の合計を計算する
SELECT brand, sum(price) FROM phone GROUP BY (brand) ORDER BY brand LIMIT 1000USE_TIME: 0.152, ROW_COUNT: 7
------------------------------- TABLE INFO ---------------------------
brand | SUM(price) |
Apple | 13895 |
Huawei | 7987 |
Meizu | 1299 |
Nokia | 169 |
OPPO | 2999 |
Samsung | 5688 |
Xiaomi | 899 |MAX関数を使用して、各ブランドの携帯電話の最高価格を取得し、価格を降順にランク付けする
SELECT brand, max(price) AS price FROM phone GROUP BY (brand) ORDER BY price DESC LIMIT 1000USE_TIME: 0.053, ROW_COUNT: 7
------------------------------- TABLE INFO ---------------------------
brand | price |
Apple | 5998 |
Samsung | 5688 |
Huawei | 4388 |
OPPO | 2999 |
Meizu | 1299 |
Xiaomi | 899 |
Nokia | 169 |MAXLABEL関数を使用して、各ブランドの最も高価な携帯電話の画面サイズを取得する
SELECT brand, MAXLABEL(size, price) AS size FROM phone GROUP BY brand