MySQL DISTINCT(SELECT付き.重複データ削除)
Udemy-The旗艦版MySQL Bootcamp:Go from SQL Beginner to Expertレビューとまとめ
DISTINCT
DISTINCT
まず作家たちのlast nameを検索してみましょう.mysql> SELECT author_lname FROM books;
+----------------+
| author_lname |
+----------------+
| Lahiri |
| Gaiman |
| Gaiman |
| Lahiri |
| Eggers |
| Eggers |
| Chabon |
| Smith |
| Eggers |
| Gaiman |
| Carver |
| Carver |
| DeLillo |
| Steinbeck |
| Foster Wallace |
| Foster Wallace |
| Harris |
| Harris |
| Saunders |
+----------------+
19 rows in set (0.00 sec)
結果が出た.でも見ると重複する名前が見えますある作家が何冊も本を書いたからだ.mysql> SELECT * FROM books;
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
| book_id | title | author_fname | author_lname | released_year | stock_quantity | pages |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
| 1 | The Namesake | Jhumpa | Lahiri | 2003 | 32 | 291 |
| 2 | Norse Mythology | Neil | Gaiman | 2016 | 43 | 304 |
| 3 | American Gods | Neil | Gaiman | 2001 | 12 | 465 |
| 4 | Interpreter of Maladies | Jhumpa | Lahiri | 1996 | 97 | 198 |
| 5 | A Hologram for the King: A Novel | Dave | Eggers | 2012 | 154 | 352 |
| 6 | The Circle | Dave | Eggers | 2013 | 26 | 504 |
| 7 | The Amazing Adventures of Kavalier & Clay | Michael | Chabon | 2000 | 68 | 634 |
| 8 | Just Kids | Patti | Smith | 2010 | 55 | 304 |
| 9 | A Heartbreaking Work of Staggering Genius | Dave | Eggers | 2001 | 104 | 437 |
| 10 | Coraline | Neil | Gaiman | 2003 | 100 | 208 |
| 11 | What We Talk About When We Talk About Love: Stories | Raymond | Carver | 1981 | 23 | 176 |
| 12 | Where I'm Calling From: Selected Stories | Raymond | Carver | 1989 | 12 | 526 |
| 13 | White Noise | Don | DeLillo | 1985 | 49 | 320 |
| 14 | Cannery Row | John | Steinbeck | 1945 | 95 | 181 |
| 15 | Oblivion: Stories | David | Foster Wallace | 2004 | 172 | 329 |
| 16 | Consider the Lobster | David | Foster Wallace | 2005 | 92 | 343 |
| 17 | 10% Happier | Dan | Harris | 2014 | 29 | 256 |
| 18 | fake_book | Freida | Harris | 2001 | 287 | 428 |
| 19 | Lincoln In The Bardo | George | Saunders | 2017 | 1000 | 367 |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
19 rows in set (0.00 sec)
そうですか.
しかし重複を避けて、作家カタログを見たい時もあります.この時はDISTINCTを使いますmysql> SELECT DISTINCT author_lname FROM books;
+----------------+
| author_lname |
+----------------+
| Lahiri |
| Gaiman |
| Eggers |
| Chabon |
| Smith |
| Carver |
| DeLillo |
| Steinbeck |
| Foster Wallace |
| Harris |
| Saunders |
+----------------+
11 rows in set (0.01 sec)
その結果、重複する部分が解消されます.
今、重複したフルネームを消したいなら、どうすればいいのでしょうか.
まずf nameとl nameを求めます.mysql> SELECT author_fname, author_lname FROM books;
+--------------+----------------+
| author_fname | author_lname |
+--------------+----------------+
| Jhumpa | Lahiri |
| Neil | Gaiman |
| Neil | Gaiman |
| Jhumpa | Lahiri |
| Dave | Eggers |
| Dave | Eggers |
| Michael | Chabon |
| Patti | Smith |
| Dave | Eggers |
| Neil | Gaiman |
| Raymond | Carver |
| Raymond | Carver |
| Don | DeLillo |
| John | Steinbeck |
| David | Foster Wallace |
| David | Foster Wallace |
| Dan | Harris |
| Freida | Harris |
| George | Saunders |
+--------------+----------------+
19 rows in set (0.00 sec)
でもここで注意したいのは次の2番目3番目がDanHarrisとFreida Harrisです二人はl nameが同じで、f nameが違うので、違う人です.しかし、SELECT DISTINCT author_lname FROM books
で出力するとHarrisは一体となる.
まずはCONCATでフルネームを獲得しましょうmysql> SELECT CONCAT (author_fname,' ', author_lname) AS 'Full Name' FROM books;
+----------------------+
| Full Name |
+----------------------+
| Jhumpa Lahiri |
| Neil Gaiman |
| Neil Gaiman |
| Jhumpa Lahiri |
| Dave Eggers |
| Dave Eggers |
| Michael Chabon |
| Patti Smith |
| Dave Eggers |
| Neil Gaiman |
| Raymond Carver |
| Raymond Carver |
| Don DeLillo |
| John Steinbeck |
| David Foster Wallace |
| David Foster Wallace |
| Dan Harris |
| Freida Harris |
| George Saunders |
+----------------------+
19 rows in set (0.00 sec)
Dan Harris
とFreida Harris
には違いがありますが、重複する名前がたくさん出てきます.では、DISTINCTをCONCAT名に適用します.mysql> SELECT DISTINCT CONCAT (author_fname, ' ', author_lname) AS 'Full Name' FROM books;
+----------------------+
| Full Name |
+----------------------+
| Jhumpa Lahiri |
| Neil Gaiman |
| Dave Eggers |
| Michael Chabon |
| Patti Smith |
| Raymond Carver |
| Don DeLillo |
| John Steinbeck |
| David Foster Wallace |
| Dan Harris |
| Freida Harris |
| George Saunders |
+----------------------+
12 rows in set (0.00 sec)
いいわ👍 Dan Harris
とFreida Harris
を区別し、重複を解消した.
実際にはもっと簡単ですmysql> SELECT DISTINCT author_fname, author_lname FROM books;
+--------------+----------------+
| author_fname | author_lname |
+--------------+----------------+
| Jhumpa | Lahiri |
| Neil | Gaiman |
| Dave | Eggers |
| Michael | Chabon |
| Patti | Smith |
| Raymond | Carver |
| Don | DeLillo |
| John | Steinbeck |
| David | Foster Wallace |
| Dan | Harris |
| Freida | Harris |
| George | Saunders |
+--------------+----------------+
12 rows in set (0.01 sec)
これでもいいSELECT DISTINCT author_fname, author_lname FROM books;
そうすればmysqlは自分で見て、全部同じなら繰り返さず、一つ違うと全部印刷されます.上記のCONCATとは異なり、CONCATではフルネームにマージして重複を解消できるため、1つのコラムにフルネームを出力することができ、次のSELECT DISTINCT author_fname, author_lname FROM books;
は2つの異なるコラムに出力されます.
Reference
この問題について(MySQL DISTINCT(SELECT付き.重複データ削除)), 我々は、より多くの情報をここで見つけました
https://velog.io/@dlawogus/MySQL-DISTINCT-SELECT와-함께.-중복제거
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
mysql> SELECT author_lname FROM books;
+----------------+
| author_lname |
+----------------+
| Lahiri |
| Gaiman |
| Gaiman |
| Lahiri |
| Eggers |
| Eggers |
| Chabon |
| Smith |
| Eggers |
| Gaiman |
| Carver |
| Carver |
| DeLillo |
| Steinbeck |
| Foster Wallace |
| Foster Wallace |
| Harris |
| Harris |
| Saunders |
+----------------+
19 rows in set (0.00 sec)
mysql> SELECT * FROM books;
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
| book_id | title | author_fname | author_lname | released_year | stock_quantity | pages |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
| 1 | The Namesake | Jhumpa | Lahiri | 2003 | 32 | 291 |
| 2 | Norse Mythology | Neil | Gaiman | 2016 | 43 | 304 |
| 3 | American Gods | Neil | Gaiman | 2001 | 12 | 465 |
| 4 | Interpreter of Maladies | Jhumpa | Lahiri | 1996 | 97 | 198 |
| 5 | A Hologram for the King: A Novel | Dave | Eggers | 2012 | 154 | 352 |
| 6 | The Circle | Dave | Eggers | 2013 | 26 | 504 |
| 7 | The Amazing Adventures of Kavalier & Clay | Michael | Chabon | 2000 | 68 | 634 |
| 8 | Just Kids | Patti | Smith | 2010 | 55 | 304 |
| 9 | A Heartbreaking Work of Staggering Genius | Dave | Eggers | 2001 | 104 | 437 |
| 10 | Coraline | Neil | Gaiman | 2003 | 100 | 208 |
| 11 | What We Talk About When We Talk About Love: Stories | Raymond | Carver | 1981 | 23 | 176 |
| 12 | Where I'm Calling From: Selected Stories | Raymond | Carver | 1989 | 12 | 526 |
| 13 | White Noise | Don | DeLillo | 1985 | 49 | 320 |
| 14 | Cannery Row | John | Steinbeck | 1945 | 95 | 181 |
| 15 | Oblivion: Stories | David | Foster Wallace | 2004 | 172 | 329 |
| 16 | Consider the Lobster | David | Foster Wallace | 2005 | 92 | 343 |
| 17 | 10% Happier | Dan | Harris | 2014 | 29 | 256 |
| 18 | fake_book | Freida | Harris | 2001 | 287 | 428 |
| 19 | Lincoln In The Bardo | George | Saunders | 2017 | 1000 | 367 |
+---------+-----------------------------------------------------+--------------+----------------+---------------+----------------+-------+
19 rows in set (0.00 sec)
mysql> SELECT DISTINCT author_lname FROM books;
+----------------+
| author_lname |
+----------------+
| Lahiri |
| Gaiman |
| Eggers |
| Chabon |
| Smith |
| Carver |
| DeLillo |
| Steinbeck |
| Foster Wallace |
| Harris |
| Saunders |
+----------------+
11 rows in set (0.01 sec)
mysql> SELECT author_fname, author_lname FROM books;
+--------------+----------------+
| author_fname | author_lname |
+--------------+----------------+
| Jhumpa | Lahiri |
| Neil | Gaiman |
| Neil | Gaiman |
| Jhumpa | Lahiri |
| Dave | Eggers |
| Dave | Eggers |
| Michael | Chabon |
| Patti | Smith |
| Dave | Eggers |
| Neil | Gaiman |
| Raymond | Carver |
| Raymond | Carver |
| Don | DeLillo |
| John | Steinbeck |
| David | Foster Wallace |
| David | Foster Wallace |
| Dan | Harris |
| Freida | Harris |
| George | Saunders |
+--------------+----------------+
19 rows in set (0.00 sec)
mysql> SELECT CONCAT (author_fname,' ', author_lname) AS 'Full Name' FROM books;
+----------------------+
| Full Name |
+----------------------+
| Jhumpa Lahiri |
| Neil Gaiman |
| Neil Gaiman |
| Jhumpa Lahiri |
| Dave Eggers |
| Dave Eggers |
| Michael Chabon |
| Patti Smith |
| Dave Eggers |
| Neil Gaiman |
| Raymond Carver |
| Raymond Carver |
| Don DeLillo |
| John Steinbeck |
| David Foster Wallace |
| David Foster Wallace |
| Dan Harris |
| Freida Harris |
| George Saunders |
+----------------------+
19 rows in set (0.00 sec)
mysql> SELECT DISTINCT CONCAT (author_fname, ' ', author_lname) AS 'Full Name' FROM books;
+----------------------+
| Full Name |
+----------------------+
| Jhumpa Lahiri |
| Neil Gaiman |
| Dave Eggers |
| Michael Chabon |
| Patti Smith |
| Raymond Carver |
| Don DeLillo |
| John Steinbeck |
| David Foster Wallace |
| Dan Harris |
| Freida Harris |
| George Saunders |
+----------------------+
12 rows in set (0.00 sec)
mysql> SELECT DISTINCT author_fname, author_lname FROM books;
+--------------+----------------+
| author_fname | author_lname |
+--------------+----------------+
| Jhumpa | Lahiri |
| Neil | Gaiman |
| Dave | Eggers |
| Michael | Chabon |
| Patti | Smith |
| Raymond | Carver |
| Don | DeLillo |
| John | Steinbeck |
| David | Foster Wallace |
| Dan | Harris |
| Freida | Harris |
| George | Saunders |
+--------------+----------------+
12 rows in set (0.01 sec)
Reference
この問題について(MySQL DISTINCT(SELECT付き.重複データ削除)), 我々は、より多くの情報をここで見つけました https://velog.io/@dlawogus/MySQL-DISTINCT-SELECT와-함께.-중복제거テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol