記入日:2023-01-05 編集日:2023-01-05
SQL見るだけクエリ。今回は前回に続いて、郵便番号データを使ってGROUP BYとLIMITを組み合わせて練習をしてみようと思います。 全国12万件のレコードを都市別でカウントし、都市別に何件のレコードがあるか計算、上位50都市を抽出してみようと思います。
この記事を読むと(約5分)
10〜20万件程度のデータから、GROUP BYとLIMIT句を使ってカウントする方法を知ることが出来ます。
全国12万件のレコードが入っている、postal_codeテーブルの、都市欄をカウントし、 都市別で何件の郵便番号レコードがあるのかを調べてみようと思います。どの都市が一番多いのでしょうか?
さていつもの様に、テーブルの情報を取得するSQLに関して、注目する部分は、以下の9~12行目のみです。
SELECT city, COUNT(city) AS total FROM postal_code GROUP BY city ORDER BY total DESC LIMIT 50 この部分で、データベース内にあるpostal_codeテーブルの、city欄(都市の文字が入っている項目)をカウントしていってます。
try {
include_once '../model/class.php';
// データベース接続
$database = new Database();
$db = $database->connect();
// SQLを準備し、パラメータをバインドする
$query = 'SELECT city, COUNT(city) AS total FROM postal_code
GROUP BY city
ORDER BY total DESC
LIMIT 50';
$stmt = $db->prepare($query);
// 実行する
$stmt->execute();
// 結果を取得する
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
// データベースから切断する
$database->disconnect();
} catch(PDOException $e) {
echo $e->getMessage();
}
これを実行すると、二次元連想配列で、取得することができます。
Array
(
[0] => Array
(
[city] => 富山市
[total] => 1147
)
[1] => Array
(
[city] => 港区
[total] => 925
)
[2] => Array
(
[city] => 岐阜市
[total] => 837
)
[3] => Array
(
[city] => 上越市
[total] => 754
)
[4] => Array
(
[city] => 新宿区
[total] => 696
)
[5] => Array
(
[city] => 京都市上京区
[total] => 656
)
[6] => Array
(
[city] => 京都市伏見区
[total] => 631
)
[7] => Array
(
[city] => 京都市下京区
[total] => 594
)
[8] => Array
(
[city] => 長岡市
[total] => 588
)
[9] => Array
(
[city] => 金沢市
[total] => 570
)
[10] => Array
(
[city] => 京都市右京区
[total] => 556
)
[11] => Array
(
[city] => 京都市中京区
[total] => 552
)
[12] => Array
(
[city] => 福井市
[total] => 530
)
[13] => Array
(
[city] => 姫路市
[total] => 523
)
[14] => Array
(
[city] => 京都市左京区
[total] => 513
)
[15] => Array
(
[city] => 千代田区
[total] => 485
)
[16] => Array
(
[city] => 豊田市
[total] => 483
)
[17] => Array
(
[city] => 和歌山市
[total] => 430
)
[18] => Array
(
[city] => 大分市
[total] => 426
)
[19] => Array
(
[city] => 高岡市
[total] => 421
)
[20] => Array
(
[city] => 栗原市
[total] => 418
)
[21] => Array
(
[city] => 豊川市
[total] => 417
)
[22] => Array
(
[city] => 奥州市
[total] => 414
)
[23] => Array
(
[city] => 奈良市
[total] => 400
)
[24] => Array
(
[city] => 鳥取市
[total] => 399
)
[25] => Array
(
[city] => 稲沢市
[total] => 390
)
[26] => Array
(
[city] => 名古屋市中村区
[total] => 382
)
[27] => Array
(
[city] => 下関市
[total] => 374
)
[28] => Array
(
[city] => 気仙沼市
[total] => 367
)
[29] => Array
(
[city] => 松山市
[total] => 364
)
[30] => Array
(
[city] => 京都市北区
[total] => 361
)
[31] => Array
(
[city] => 平川市
[total] => 358
)
[32] => Array
(
[city] => 長崎市
[total] => 357
)
[33] => Array
(
[city] => 豊橋市
[total] => 356
)
[34] => Array
(
[city] => 旭川市
[total] => 349
)
[35] => Array
(
[city] => 南砺市
[total] => 330
)
[36] => Array
(
[city] => 秋田市
[total] => 325
)
[37] => Array
(
[city] => 江南市
[total] => 324
)
[38] => Array
(
[city] => 西宮市
[total] => 323
)
[39] => Array
(
[city] => 横手市
[total] => 323
)
[40] => Array
(
[city] => 岡崎市
[total] => 322
)
[41] => Array
(
[city] => 豊岡市
[total] => 315
)
[42] => Array
(
[city] => 長浜市
[total] => 314
)
[43] => Array
(
[city] => 長野市
[total] => 312
)
[44] => Array
(
[city] => 登米市
[total] => 310
)
[45] => Array
(
[city] => 高知市
[total] => 308
)
[46] => Array
(
[city] => 岡山市北区
[total] => 308
)
[47] => Array
(
[city] => 伊達市
[total] => 307
)
[48] => Array
(
[city] => 佐世保市
[total] => 297
)
[49] => Array
(
[city] => 津市
[total] => 296
)
)
| 多い順 | city | total | 割合 |
|---|---|---|---|
1 |
富山市 |
1,147件 |
0.92% |
2 |
港区 |
925件 |
0.74% |
3 |
岐阜市 |
837件 |
0.67% |
4 |
上越市 |
754件 |
0.61% |
5 |
新宿区 |
696件 |
0.56% |
6 |
京都市上京区 |
656件 |
0.53% |
7 |
京都市伏見区 |
631件 |
0.51% |
8 |
京都市下京区 |
594件 |
0.48% |
9 |
長岡市 |
588件 |
0.47% |
10 |
金沢市 |
570件 |
0.46% |
11 |
京都市右京区 |
556件 |
0.45% |
12 |
京都市中京区 |
552件 |
0.44% |
13 |
福井市 |
530件 |
0.43% |
14 |
姫路市 |
523件 |
0.42% |
15 |
京都市左京区 |
513件 |
0.41% |
16 |
千代田区 |
485件 |
0.39% |
17 |
豊田市 |
483件 |
0.39% |
18 |
和歌山市 |
430件 |
0.35% |
19 |
大分市 |
426件 |
0.34% |
20 |
高岡市 |
421件 |
0.34% |
21 |
栗原市 |
418件 |
0.34% |
22 |
豊川市 |
417件 |
0.33% |
23 |
奥州市 |
414件 |
0.33% |
24 |
奈良市 |
400件 |
0.32% |
25 |
鳥取市 |
399件 |
0.32% |
26 |
稲沢市 |
390件 |
0.31% |
27 |
名古屋市中村区 |
382件 |
0.31% |
28 |
下関市 |
374件 |
0.30% |
29 |
気仙沼市 |
367件 |
0.29% |
30 |
松山市 |
364件 |
0.29% |
31 |
京都市北区 |
361件 |
0.29% |
32 |
平川市 |
358件 |
0.29% |
33 |
長崎市 |
357件 |
0.29% |
34 |
豊橋市 |
356件 |
0.29% |
35 |
旭川市 |
349件 |
0.28% |
36 |
南砺市 |
330件 |
0.26% |
37 |
秋田市 |
325件 |
0.26% |
38 |
江南市 |
324件 |
0.26% |
39 |
西宮市 |
323件 |
0.26% |
40 |
横手市 |
323件 |
0.26% |
41 |
岡崎市 |
322件 |
0.26% |
42 |
豊岡市 |
315件 |
0.25% |
43 |
長浜市 |
314件 |
0.25% |
44 |
長野市 |
312件 |
0.25% |
45 |
登米市 |
310件 |
0.25% |
46 |
高知市 |
308件 |
0.25% |
47 |
岡山市北区 |
308件 |
0.25% |
48 |
伊達市 |
307件 |
0.25% |
49 |
佐世保市 |
297件 |
0.24% |
50 |
津市 |
296件 |
0.24% |
富山市がトップでした。
SQLの使いどころ
サイトに大量の情報を掲載することは、ユーザーにとってとても便利なことです。しかし、情報が多すぎると、目的の情報を見つけるのが困難になります。そのため、SQLを使用することで、情報を効率的に管理することができます。
SQLを使用することで、データベース内の情報を検索したり、フィルタリングしたりすることができます。これにより、ユーザーは目的の情報をスムーズかつ簡単に見つけることができます。
また、SQLを使用することで、データを集計したり、統合したりすることもできます。これにより、ユーザーはさまざまな視点から情報を分析することができます。つまり、サイトに多くの情報を掲載することが重要である一方で、その情報を効率的かつ簡単に管理することが求められる場合には、SQLが不可欠であるといえます。
KK
機械工学を専攻。工業デザイナーとして、国内及び海外の自動車・搬送ラインの設計などに従事した後、2003年にウェブシステム会社を設立。UI設計やウェブシステムの開発、DX化のディレクションなどを行っています。