<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>max &#8211; スグブログ</title>
	<atom:link href="https://sugublog.org/tag/max/feed/" rel="self" type="application/rss+xml" />
	<link>https://sugublog.org</link>
	<description>ブログ運営について発信中</description>
	<lastBuildDate>Tue, 19 Mar 2024 09:48:44 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://sugublog.org/wp-content/uploads/2021/07/icon_20210703-min-150x150.png</url>
	<title>max &#8211; スグブログ</title>
	<link>https://sugublog.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【SQL】max関数で最大値のレコードを取得する方法</title>
		<link>https://sugublog.org/sql-max/</link>
					<comments>https://sugublog.org/sql-max/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Tue, 19 Mar 2024 09:48:43 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[max]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6533</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-8-1024x724.jpg" class="webfeedsFeaturedVisual" /></p>SQLのmax関数で最大値のレコードを取得する方法を教えます。 また最大値のレコードを取得する時のエラーになるものや注意点もお伝えします。 そのエラーの対処法なども現役エンジニアの筆者が答えていきます。 この記事を読めば [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-8-1024x724.jpg" class="webfeedsFeaturedVisual" /></p>
<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">SQLのmax関数</span></strong>で最大値のレコードを取得する方法</span>を教えます。</p>



<p>また<span class="swl-marker mark_yellow">最大値のレコードを取得する時の<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-fz u-fz-l">エラー</span></span>になるものや<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-fz u-fz-l">注意点</span></span></span>もお伝えします。</p>



<p>その<span class="swl-inline-color has-swl-deep-03-color"><span class="swl-fz u-fz-l">エラーの対処法</span></span>なども現役エンジニアの筆者が答えていきます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p>この記事を読めば<span class="swl-inline-color has-swl-deep-01-color">SQLのmaxについて理解</span>できます。</p>



<h2 class="wp-block-heading">SQLのmax関数で最大値のレコードを取得する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="770" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg" alt="max" class="wp-image-4805" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-300x226.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-768x577.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange">最大値のレコードを取得する<strong><span class="swl-inline-color has-swl-deep-01-color">max関数</span></strong>のSQLの基礎</span>は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select max(カラム名) where テーブル名 group by グルーピングしたいカラム名</code></pre></div>



<p>SQLの<span class="swl-inline-color has-swl-deep-02-color">テーブル基礎構成</span>は以下です。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>SQLのテーブル構成</th><th>カラム１</th><th>カラム２</th></tr></thead><tbody><tr><th>レコード１</th><td>レコード１の値</td><td>レコード１の値</td></tr><tr><th>レコード２</th><td>レコード２の値</td><td>レコード２の値</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのテーブル構成</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">max関数の特徴</span></strong>として３つあります。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>SQLのMAX関数の特徴３選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>グループ内で最大値を抽出する</li>



<li>グループを指定しない場合は全体を1グループとして抽出する</li>



<li>数字だけでなく、文字列や日付なども使用可能</li>
</ul>
</div></div>



<h2 class="wp-block-heading">maxを使用してグループ内で最大値を抽出する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/07/analytics-6-1024x683.jpg" alt="max" class="wp-image-3692" srcset="https://sugublog.org/wp-content/uploads/2021/07/analytics-6-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">max</span></strong>を使用してグループ内で最大値を抽出</span>してみます。</p>



<p>まず下のようなSQLテーブルがあるとします。テーブル名は「users」にします。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>「group」カラムが同じものの中での最大値を抽出してみます。そのSQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name ,max(score) from users group by group_name;</code></pre></div>



<p>このSQLを実行した結果は以下となります。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th>group_name</th><th>max(score)</th></tr></thead><tbody><tr><td>A</td><td>43</td></tr><tr><td>B</td><td>41</td></tr><tr><td>C</td><td>12</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">AからCまでのグループの中で、scoreの最大値が表示されています。</p>



<h2 class="wp-block-heading">maxを持っているレコードを表示したい時の注意点</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-1024x683.jpg" alt="注意" class="wp-image-4208" srcset="https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>では先程の条件で<span class="swl-inline-color has-swl-deep-01-color">レコード全体</span>を表示してみます。SQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select id,name,group_name ,max(score) from users group by group_name;</code></pre></div>



<p>selectの後に「id」と「name」を追加しました。</p>



<p>実行結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th>group_name</th><th> score </th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true"> </span>2</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_2</td><td>A</td><td>43</td></tr><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>1</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true"> </span>user_1</td><td>B</td><td>41</td></tr><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>4</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_4</td><td>C</td><td>12</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p>このSQLですがデーターベースの種類によって<span class="swl-bg-color has-swl-deep-01-background-color">エラー</span>が出るか、<span class="swl-bg-color has-swl-deep-01-background-color">想定外のグループの最初の人</span>が出るかになります。</p>



<p class="is-style-big_icon_point">「group by」でグルーピングした場合は<span class="swl-inline-color has-swl-deep-01-color">「group by」で指定したカラム</span>か、<span class="swl-inline-color has-swl-deep-01-color">関数（maxやminなど）</span>でないと思い通りに処理してくれません。</p>



<p>このDBではエラーが出ず結果が出ていますが、「id」と「name」に関しては正常に表示されていません。</p>



<p class="has-border -border01">例えばAグループの最高得点は43ですが、その方の「id」は「5」、「name」は「user_5」が正解です。しかしここでは「id」は「2」、「name」は「user_2」となっており、想定通りではありません。</p>



<p class="is-style-big_icon_caution">「group by」でグルーピングした場合は<span class="swl-marker mark_yellow"><span class="swl-inline-color has-swl-deep-01-color"><strong>「group by」で指定したカラム</strong></span>か<strong><span class="swl-inline-color has-swl-deep-01-color">関数（maxやminなど）</span></strong>以外は指定しないでください。</span></p>



<h2 class="wp-block-heading">max関数でグループを指定しない場合</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="620" src="https://sugublog.org/wp-content/uploads/2021/11/user1114-1024x620.jpg" alt="グルーピング" class="wp-image-4505" srcset="https://sugublog.org/wp-content/uploads/2021/11/user1114-1024x620.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/user1114-300x182.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/user1114-768x465.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/user1114.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">max関数でグループを指定しない場合</span></strong>を試します。SQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name ,max(score) from users;</code></pre></div>



<p>scoreのmax以外にgroup_nameを追加で表示させています。実行結果は以下です。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th>group_name</th><th>max(score)</th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>B</td><td>43</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">テーブル全体で一番最大の43が表示されていますが、それに対応する「group_name」の「A」ではなく「B」が表示されています。</p>



<p class="is-style-big_icon_caution">グループを指定しない場合はテーブルを一つのグループとして抽出するので<span class="swl-marker mark_yellow"><strong><span class="swl-inline-color has-swl-deep-01-color">関数（maxやmin）以外</span></strong>は指定しないでください。</span></p>



<h2 class="wp-block-heading">maxで数字だけでなく、文字列や日付などの最大を抽出</h2>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1024" height="649" src="https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499.jpg" alt="日付" class="wp-image-2966" srcset="https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499-300x190.jpg 300w, https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499-768x487.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th>birthday</th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>1999-4-3</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>1996-07-15</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>2001-12-03</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>2006-01-09</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>1998-07-07</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>maxやminは数字だけではなく、<span class="swl-inline-color has-swl-deep-01-color">日付や文字列</span>まで優劣をつけてくれます。</p>



<p>ここでは日付の最大を抽出してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name,name,max(birthday) from users;</code></pre></div>



<p>SQLの実行結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> group_name</th><th>name</th><th> max(birthday)</th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>B</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_1</td><td>2006-01-09</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">maxで最大の「2006年1月9日」が抽出されています。</p>



<p class="is-style-icon_bad">max以外の指定カラムは出鱈目（デタラメ）なので注意です。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">max関数以外のレコードも全て表示する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="288" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-1024x288.jpg" alt="" class="wp-image-3983" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-1024x288.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-300x84.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-768x216.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">maxで最大値のレコード全体を表示</span></strong>できないかをサブクエリで試行錯誤してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>SELECT * 
FROM `users` AS u 
where score 
in (select max(score) 
from `users` AS s 
where u.group_name = s.group_name)</code></pre></div>



<p>「users」のテーブルを「u」として「score」がサブクエリの結果の範囲に入っているレコードを表示します。</p>



<p>サブクエリでは「users」テーブルを「s」として「u」と「s」の「group_name」が同じもののmax（最大値）を表示します。</p>



<p>サブクエリの最大値がscoreと同じレコードを全て表示しています。</p>



<p>SQLの結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>1</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_1</td><td>41</td><td>B</td></tr><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>4</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_4</td><td>12</td><td>C</td></tr><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>5</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p class="has-border -border01">グループごとのmax（最大値）が表示され、そのレコードも全て表示できました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/sql-max/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
