質問するログイン新規登録
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

2973閲覧

[SQL]カラムの部分一致を条件としたGROUP BY を行いたい

yomigi

総合スコア43

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2022/12/18 17:04

0

1

前提

以下のようなデータが存在するとします

Users

IDnameagepointzip_coeprefectureaddress
1太郎10100163-8001東京都新宿区西新宿
2次郎9150105-8511東京都港区芝
3三郎11200104-8404東京都中央区築地
4四郎12250192-8501東京都八王子市元本郷町
5五郎810160-0022東京都新宿区新宿

実現したいこと

  • pointの合計値をaddressの区または市単位GROUP BYして集計したいです
    • イメージは以下の形です

      sum_pointaddress
      110新宿区
      150港区
      200中央区
      250八王子市

試したこと

  • 例えばprefectureを条件にする場合であれば簡単でした

    sql

    1 select sum(point) as sum_point, prefecture from `users` group by prefecture;
  • しかし、「addressの区または市単位GROUP BY」する方法が知識が足りずわかりませんでした

    • なんとなく、like句で「市または区を区切り文字にした前方一致」にてどうにかできるのかな?というアタリはあるのですが・・
  • そもそもこのような集計がSQLの技術的に可能であるのかすら不明なのですが、どなたか助力をお願いしたく投稿いたしました

補足情報(FW/ツールのバージョンなど)

MySQL 5.7

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matukeso

2022/12/18 18:58

東京都西多摩郡檜原村とかは存在しない前提なの?
退会済みユーザー

退会済みユーザー

2022/12/18 19:40 編集

タイトルが「[SQL]カラムの部分一致を条件としたGROUP BY を行いたい」なので、 質問者さんにしか分かりませんが、地方自治体データを提示しているのは、例え話であって、 目的は、カラムの文字列の一部をもとに GROUP 化したいという事かも知れません。 本当に住所、郵便番号、市区町村、地方自治体などで GROUP BY したいのであれば、 日本郵便のサイトからデータを取得して、郵便番号と地方公共団体コードを結び付けて集計すれば済む話なので・・・。 https://www.post.japanpost.jp/zipcode/dl/readme.html https://www.post.japanpost.jp/zipcode/dl/kogaki-zip.html
KOZ6.0

2022/12/18 19:33

「郵便番号データダウンロード」 https://www.post.japanpost.jp/zipcode/download.html 東京都のCSVデータをダウンロードすると、市、区の入った列があります。 これと郵便番号を突き合わせるのが楽かなと思います。 # 郡は西多摩郡瑞穂町、西多摩郡日の出町という具合に町や村などが入っていますが、これはどう扱うのか決めてください。 address の中から「市」や「区」という文字を検索して・・・なんてことも考えられますが、「市川市」(東京都ではないですが)などの例外を考慮すると物凄く面倒なことになりそうです。
退会済みユーザー

退会済みユーザー

2022/12/18 19:39

それと、下記のケースを考えると、住所を文字列ベースで考えるのは最適ではないと思います。 ※市が連続して存在するケース  野々市市・四日市市・静市市原町 ※町が連続して存在するケース  岩手県花巻市東和町町井・宮城県登米市豊里町町浦・秋田県能代市二ツ井町町尻 上記は連続して存在しているケースだけであり、連続せずに複数存在するケースもあります。
KOZ6.0

2022/12/18 19:59

SQLでちゃちゃっと出来そうではないですね。 「addressの区または市単位」で集計するのはあきらめたほうが良さそうですよ。>yomigi さん
yomigi

2022/12/19 14:23

みなさまありがとうございます。 前提の考慮が多々漏れていたようですみません。 結論表題の条件での集計は難しいということで承知いたしました。
guest

回答1

0

ベストアンサー

市町村単位でカラムを用意することです。
とくに区は政令指定都市の場合市と競合します

投稿2022/12/19 00:26

yambejp

総合スコア117975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問