MySqlでクエリを実行するときにonly_full_group_byに関連するエラー

467
Dan Bemowski 2015-12-06 21:42.

システムをアップグレードし、作業中のWebアプリケーション用にPHPを使用してMySql5.7.9をインストールしました。動的に作成されるクエリがあり、古いバージョンのMySqlで実行すると正常に機能します。5.7にアップグレードしてから、次のエラーが発生します。

SELECTリストの式#1はGROUP BY句になく、GROUPBY句の列に機能的に依存しない非集約列 'support_desk.mod_users_groups.group_id'が含まれています。これはsql_mode = only_full_group_byと互換性がありません

サーバーSQLモードのトピックに関するMysql5.7のマニュアルページに注意してください。

これは私に問題を引き起こしているクエリです:

SELECT mod_users_groups.group_id AS 'value', 
       group_name AS 'text' 
FROM mod_users_groups
LEFT JOIN mod_users_data ON mod_users_groups.group_id = mod_users_data.group_id 
WHERE  mod_users_groups.active = 1 
  AND mod_users_groups.department_id = 1 
  AND mod_users_groups.manage_work_orders = 1 
  AND group_name != 'root' 
  AND group_name != 'superuser' 
GROUP BY group_name 
HAVING COUNT(`user_id`) > 0 
ORDER BY group_name

この問題についてグーグルで調べましたがonly_full_group_by、クエリを修正するために何をする必要があるかを理解するのに十分な理解がありません。only_full_group_byオプションをオフにすることはできますか、それとも他に何かする必要がありますか?

さらに情報が必要な場合はお知らせください。

18 answers

372
davmos 2015-12-06 22:19.

私はちょうど追加しますgroup_idGROUP BY

SELECT一部ではない列を作成する場合GROUP BY、グループ内のその列に複数の値が存在する可能性がありますが、結果には単一の値用のスペースしかありません。したがって、データベースには通常、これらの複数の値を1つの値にする方法を正確に伝える必要があります。一般的に、これはのような集約関数で行われCOUNT()SUM()MAX()等...私が言う通常、他のほとんどの一般的なデータベース・システムは、この主張ので。ただし、バージョン5.7より前のMySQLでは、文句を言わず、任意の値を任意に選択するため、デフォルトの動作はより寛容でした。またANY_VALUE()、以前と同じ動作が本当に必要な場合に、この質問の別の解決策として使用できる機能もあります。この柔軟性は非決定論的であるためコストがかかります。したがって、それを必要とする非常に正当な理由がない限り、これはお勧めしません。MySQLは現在only_full_group_by、正当な理由でデフォルトで設定をオンにしているので、それに慣れて、クエリをそれに準拠させるのが最善です。

では、なぜ上記の私の簡単な答えですか?私はいくつかの仮定をしました:

1)group_idはユニークです。合理的なようですが、結局のところ「ID」です。

2)group_nameもユニークです。これは、そのような合理的な仮定ではないかもしれません。これが当てはまらず、重複がgroup_namesあり、私のアドバイスに従ってに追加group_idするGROUP BYと、同じ名前のグループの結果に別々の行が含まれるため、以前よりも多くの結果が得られる場合があります。私にとって、これは、データベースが値を任意に静かに選択しているため、これらの重複グループを非表示にするよりも優れています。

複数のテーブルが関係している場合は、すべての列をテーブル名またはエイリアスで修飾することもお勧めします...

SELECT 
  g.group_id AS 'value', 
  g.group_name AS 'text' 
FROM mod_users_groups g
LEFT JOIN mod_users_data d ON g.group_id = d.group_id 
WHERE g.active = 1 
  AND g.department_id = 1 
  AND g.manage_work_orders = 1 
  AND g.group_name != 'root' 
  AND g.group_name != 'superuser' 
GROUP BY 
  g.group_name, 
  g.group_id 
HAVING COUNT(d.user_id) > 0 
ORDER BY g.group_name
371
WeiYuan 2016-03-02 07:40.

only_full_group_by次の手順を実行して、設定を無効にすることができます。

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

MySQL 8は受け入れないNO_AUTO_CREATE_USERため、削除する必要があります。

336
azerafati 2016-07-25 01:27.

他の回答で説明されているように警告メッセージをオフにするか、何が起こっているのかを理解し修正することができます。

MySQL 5.7.5以降、デフォルトのSQLモードにはONLY_FULL_GROUP_BY含まれています。つまり、行をグループ化してからそのグループから何かを選択する場合、その選択を行う行明示的に指定する必要があります。

Mysqlは、探しているグループのどの行を知る必要があります。これにより、2つのオプションが提供されます。

  • 必要な列をグループステートメントに追加することもできます。group by rect.color, rect.valueこれは、場合によっては必要なものにすることができます。そうしないと、同じ色で重複した結果が返され、必要ない場合があります。
  • mysqlの集計関数を使用して、完全なリストのようにグループ内で探している行を示すこともできます。AVG() MIN() MAX()
  • そして最後にANY_VALUE()、グループ内のすべての結果が同じであることが確実な場合に使用できます。doc
174
Ajai 2016-07-04 22:23.

現在のクエリに変更を加えたくない場合は、以下の手順に従ってください-

  1. あなたの箱にvagrantssh
  2. タイプ: sudo vim /etc/mysql/my.cnf
  3. ファイルの一番下までスクロールしAて入力し、挿入モードに入ります
  4. コピーアンドペースト

    [mysqld]
    sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
  5. 入力しescた入力モードを終了するには

  6. 入力:wqしてvimを保存して閉じます。
  7. 入力sudo service mysql restartしてMySQLを再起動します。
85
Italo Borssatto 2016-11-14 11:11.

ANY_VALUE()集計されていない列を参照するために使用します。

SELECT name,           address , MAX(age) FROM t GROUP BY name; -- fails
SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name; -- works

MySQL 5.7ドキュメントから:

ONLY_FULL_GROUP_BY を使用ANY_VALUE()して非集計列を参照することにより、無効にすることなく同じ効果を得ることができます。

..。

ONLY_FULL_GROUP_BY選択リストの非集計アドレス列がGROUP BY句で指定されていないため、このクエリは有効にすると無効になる可能性があります。

SELECT name, address, MAX(age) FROM t GROUP BY name;

..。

特定のデータセットについて、各名前の値が実際にアドレス値を一意に決定することがわかっている場合、アドレスは事実上機能的に名前に依存します。MySQLにクエリを受け入れるように指示するには、次のANY_VALUE()関数を使用できます。

SELECT name, ANY_VALUE(address), MAX(age) FROM t GROUP BY name;
56
Abraham Tugalov 2017-04-30 09:03.

このエラーが何であるかを説明しようと思います。
MySQL 5.7.5以降、オプションONLY_FULL_GROUP_BYはデフォルトで有効になっています。
したがって、標準のSQL92以前によると:

選択リスト、HAVING条件、またはORDER BYリストが、GROUP BY句で名前が付けられておらず、GROUP BY列に機能的に依存していない(一意に決定されていない)非集約列を参照しているクエリは許可されません。

ドキュメントで詳細を読む

したがって、たとえば:

SELECT * FROM `users` GROUP BY `name`;

上記のクエリを実行すると、エラーメッセージが表示されます。

#1055-SELECTリストの式#1はGROUP BY句になく、GROUPBY句の列に機能的に依存しない非集約列 'testsite.user.id'が含まれています。これはsql_mode = only_full_group_byと互換性がありません

どうして?
MySQLは正確に理解していないため、グループ化されたレコードから取得する特定の値は何か、これがポイントです。

IEは、usersテーブルに次のレコードがあると言うことができます。

そして、上記の無効なクエリを実行します。
また、上記のエラーが発生します。これは、という名前のレコードが3つJohnあり、それは素晴らしいことですが、すべてのレコードのemailフィールド値が異なるためです。
したがって、MySQLは、結果のグループ化されたレコードでどちらを返すかを単純に理解していません。

次のようにクエリを変更するだけで、この問題を修正できます。

SELECT `name` FROM `users` GROUP BY `name`

また、SELECTセクションにさらにフィールドを追加することもできますが、それらが集約されていない場合は追加できませんが、使用できる松葉杖があります(ただし、強くお勧めしません)。

SELECT ANY_VALUE(`id`), ANY_VALUE(`email`), `name` FROM `users` GROUP BY `name`

さて、なぜ使用ANY_VALUEが強く推奨されないのかと疑問に思うかもしれません。
MySQLは、取得するグループ化されたレコードの値を正確に認識していないため、この関数を使用して、それらのいずれかをフェッチするように要求します(この場合、名前= Johnの最初のレコードの電子メールがフェッチされました)。
正確に私はあなたがこの振る舞いを存在させたい理由についての考えを思い付くことができません。

私のことを理解していない場合は、MySQLでのグループ化の仕組みについて詳しく読んでください。非常に簡単です。

そして最後に、もう1つの単純でありながら有効なクエリがあります。
利用可能な年齢に応じて合計ユーザー数をクエリする場合は、このクエリを書き留めてください。

SELECT `age`, COUNT(`age`) FROM `users` GROUP BY `age`;

MySQLのルールによれば、これは完全に有効です。
等々。

問題が正確に何であるかを理解し、それから解決策を書き留めることが重要です。

42
Ryan 2016-09-01 04:09.

私はLaravelホームステッドでLaravel5.3、mysql 5.7.12を使用しています(0.5.0、私は信じています)

/etc/mysql/my.cnf反映するように編集を明示的に設定した後でも:

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

私はまだエラーを受け取っていました。

私はからに変更する必要config/database.phpがありtrueましたfalse

    'mysql' => [
        'strict' => false, //behave like 5.6
        //'strict' => true //behave like 5.7
    ], 

参考文献:

https://laracasts.com/discuss/channels/servers/set-set-sql-mode-on-homestead https://mattstauffer.co/blog/strict-mode-and-other-mysql-customizations-in-laravel -5-2

20
PiyaChakraborty 2017-03-22 04:15.

wamp 3.0.6または安定版2.5以外の上位バージョンを使用している場合、この問題が発生する可能性があります。まず、問題はsqlにあります。それに応じてフィールドに名前を付ける必要があります。しかし、それを解決する別の方法があります。wampの緑色のアイコンをクリックします。mysql-> mysql設定-> sql_mode-> none。またはコンソールからデフォルト値を変更できます。

mysql> set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
20
Anil Gupta 2019-10-12 00:44.

mysqlまたはphpmyadminに移動し、データベースを選択してから、このクエリを実行するだけで機能します。それは私にとってはうまく機能しています。

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
19
Jagdeep Singh 2017-06-21 00:34.

ファイルへの行の追加(以下に記載):/ etc / mysql / my.cnf

[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

私のためにうまく働きます。サーバーバージョン:5.7.18-0ubuntu0.16.04.1-(Ubuntu)

10
Tanvir Hasan Anick 2016-11-18 06:43.

Mac用:

1.デフォルトのmy-default.cnfを/etc/my.cnfにコピーします

sudo cp $(brew --prefix mysql)/support-files/my-default.cnf /etc/my.cnf

2.お気に入りのエディターを使用してmy.cnfのsql_modeを変更し、これに設定します

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

3.MySQLサーバーを再起動します。

mysql.server restart
7
Kai Noack 2016-08-14 19:35.

これが私が問題全体を理解するのに役立ったものです:

  1. https://stackoverflow.com/a/20074634/1066234
  2. https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

そして、次の問題のあるクエリの別の例では。

問題がある:

SELECT COUNT(*) as attempts, SUM(elapsed) as elapsedtotal, userid, timestamp, questionid, answerid, SUM(correct) as correct, elapsed, ipaddress FROM `gameplay`
                        WHERE timestamp >= DATE_SUB(NOW(), INTERVAL 1 DAY)
                        AND cookieid = #

これを最後に追加することで解決しました:

  GROUP BY timestamp, userid, cookieid, questionid, answerid, elapsed, ipaddress

注:PHPのエラーメッセージを参照してください。問題がどこにあるかがわかります。

例:

MySQLクエリエラー1140:GROUP BYを使用しない集約クエリで、SELECTリストの式#4に非集約列 'db.gameplay.timestamp'が含まれています。これはsql_mode = only_full_group_byと互換性がありません-クエリ:SELECT COUNT(*)を試行、SUM(elapsed)を経過合計、userid、timestamp、questionid、answerid、SUM(correct)を正しい、経過、ipaddressFROMゲームプレイWHEREタイムスタンプ> = DATE_SUB (NOW()、間隔1日)AND userid = 1

この場合、式#4がGROUPBYにありませんでした。

7
Braham Dev Yadav 2017-01-15 07:47.

localhost / wampserver 3の場合、sql-mode = user_modeを設定してこのエラーを削除できます。

click on wamp icon -> MySql -> MySql Setting -> sql-mode -> user_mode

次に、wampまたはapacheを再起動します

4
micaball 2017-09-11 06:07.

あなたは追加することができますunique indexしますgroup_id。あなたがそれgroup_idがユニークであると確信しているなら。

クエリを変更せずにケースを解決できます

遅い答えですが、答えにはまだ言及されていません。多分それは利用可能なすでに包括的な答えを完了する必要があります。少なくとも、フィールドが多すぎるテーブルを分割する必要がある場合は、問題は解決しました。

2
Gangai Johann 2017-08-10 02:30.

doctrine query Builderを使用してSymfonyでこのエラーが発生し、このエラーがorderByによって引き起こされた場合

select必要な列に注意して、代わりにgroupBy使用してください:addGroupBygroupBy

$query = $this->createQueryBuilder('smth')->addGroupBy('smth.mycolumn');

上の作品Symfony3 -

1
Harry Bosh 2017-03-02 17:03.

正確なSQLを使用しなかったことをお詫びします

このクエリを使用して、Mysqlの警告を克服しました。

SELECT count(*) AS cnt, `regions_id`
FROM regionables 
WHERE `regionable_id` = '115' OR `regionable_id` = '714'
GROUP BY `regions_id`
HAVING cnt > 1

私にとっての鍵に注意してください

count(*) AS cnt
0
Kiran Sone 2020-07-05 02:39.

Ubuntu18.04で以下のファイルを編集する必要がありました。

/etc/mysql/mysql.conf.d/mysqld.cnf

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

そして

sudo service mysql restart

0
RayCh 2020-08-12 04:42.

上記のコンセンサスの答えは良いですが、my.cnfファイルを修正した後、ストアドプロシージャ内でクエリを実行する際に問題が発生した場合は、SPを再度ロードしてみてください。

MySQLは元々デフォルトのonly_full_group_byを設定してSPをコンパイルしたに違いないと思います。したがって、my.cnfを変更してmysqldを再起動しても、SPに影響はなく、「SELECTリストはGROUP BY句になく、集約されていない列が含まれています...これはGROUPの列に機能的に依存していません」と失敗し続けました。 BY句。これはsql_mode = only_full_group_by "と互換性がありません。

SPをリロードすると、only_full_group_byが無効になっている状態でSPが再コンパイルされたはずです。その後、期待通りに動作しているようです。

Related questions

MORE COOL STUFF

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

2021 年 6 月 8 日にニューヨーク市で開催された covid-19 パンデミックで亡くなった人々の命を偲び、祝うために、ネーミング ザ ロスト メモリアルズが主催するイベントと行進の最中に、グリーンウッド墓地の正門から記念碑がぶら下がっています。週末、ジョー・バイデン大統領は、covid-19 パンデミックの終息を宣言しました。これは、過去 2 年以上にわたり、公の場でそうするための長い列の中で最新のものです。

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

オハイオ州のエミリー・デシャネル みんな早く来て、ボーンズが帰ってきた!まあ、ショーボーンズではなく、彼女を演じた俳優. エミリー・デシャネルに最後に会ってからしばらく経ちました.Emily Deschanel は、長期にわたるプロシージャルな Bones の Temperance “Bones” Brennan としてよく知られています。

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

どうやら、ドナルド・トランプに近い人々は、今月初めにFBIによって家宅捜索された彼のMar-a-Lago財産からの映像を公開するよう彼に勧めています. 前大統領はテープを公開するかどうかを確認していませんが、息子はフォックス・ニュースにそうなるだろうと語った.

Andor は、他の Star Wars ショーから大きな距離を置きます。

Andor は、他の Star Wars ショーから大きな距離を置きます。

アンドールの一場面。数十年前、ジョージ・ルーカスがスター・ウォーズのテレビ番組を制作するのを妨げた主な理由は、お金でした。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language