mySQL全指令学习记录
新手入門,用微軟access幫助學了個大概。后來找到一個網站,可以在線做題?自學SQL網(教程 視頻 練習全套) (xuesql.cn)。答案XUESQL中文在線SQL練習及其答案 - 知乎 (zhihu.com)
現有表如圖
目錄
入門級命令
1. SELECT
2. WHERE
3. 查詢、過濾和排序
4 多函數嵌套
5??用JOINs進行多表聯合查詢
6?外連接(OUTER JOINs)
7 NULL的處理
高級指令
1 包含表達式
?2?在查詢中進行統計
3 分組統計
4 在查詢中進行統計
總結
查詢執行順序
1.?FROM?和?JOINs
2.?WHERE
3.?GROUP BY
4.?HAVING
5.?SELECT
6.?DISTINCT
7.?ORDER BY
8.?LIMIT?/?OFFSET
結論
答案轉載?
單表練習
多表練習
入門級命令
SQL 關鍵之如?SELECT,?WHERE,?AND,OR?都是大寫的,但SQL其實是兼容寫成 select,where小寫的. 大寫這些關鍵字有助于我們把 關鍵字 和 你的表名,列名區分開,讓 SQL更容易理解。
1. SELECT
--請輸入sql SELECT * FROM movies; --表示從 movies這張表格里選擇*字段的數據,并顯示。 --eg. SELECT title,director FROM movies SELECT count(*) FROM movies --計數 SELECT 1+1 --計算值2. WHERE
-- 條件查詢語法 SELECT column, another_column, … FROM mytable WHERE conditionAND/OR another_conditionAND/OR …;| Operator(操作符) | Condition(解釋) | Example(例子) |
| = | Case sensitive exact string comparison (notice the single equals)完全等于 | col_name?=?"abc" |
| != or <> | Case sensitive exact string inequality comparison 不等于 | col_name?!=?"abcd" |
| LIKE | Case insensitive exact string comparison 沒有用通配符等價于 = | col_name?LIKE?"ABC" |
| NOT LIKE | Case insensitive exact string inequality comparison 沒有用通配符等價于 != | col_name?NOT LIKE?"ABCD" |
| % | Used anywhere in a string to match a sequence of zero or more characters (only with LIKE or NOT LIKE) 通配符,代表匹配0個以上的字符 | col_name?LIKE?"%AT%" (matches "AT", "ATTIC", "CAT" or even "BATS") "%AT%" 代表AT 前后可以有任意字符 |
| _ | Used anywhere in a string to match a single character (only with LIKE or NOT LIKE) 和% 相似,代表1個字符 | col_name?LIKE?"AN_" (matches "AND", but not "AN") |
| IN (…) | String exists in a list 在列表 | col_name?IN?("A", "B", "C") |
| NOT IN (…) | String does not exist in a list 不在列表 | col_name?NOT IN?("D", "E", "F") |
在字符串表達式中的字符串需要用引號 " 包含,如果不用引號,SQL會認為是一個屬性列的名字,如:col_name = color 表示 col_name和color兩個屬性一樣的行 col_name = "color" 表示 col_name 屬性為字符串 "color"的行.
condition:?
可以是deo? in? (10,20)? 意思是(10,20)范圍內的deo。
name like '%i%' or job like '%er' 意思是 含有字母i 或者以er為結尾的字符段。
3. 查詢、過濾和排序
拿之前的 Movies表來說,可能很多電影都是同一年Year發布的,如果你想要按年份排重,一年只能出現一部電影到結果中, 可以用?DISTINCT?關鍵字來指定某個或某些屬性列唯一返回。
-- 選取出唯一的結果的語法 SELECT DISTINCT column, another_column, … FROM mytable WHERE condition(s);?因為?DISTINCT?語法會直接刪除重復的行, 我們還會學習?GROUP BY?語句,?GROUP BY?也會返回唯一的行,不過可以對具有相同的 屬性值的行做一些統計計算,比如:求和.
為了解決結果排序問題, 我們可以用?ORDER BY col_name?排序的語法來讓結果按一個或多個屬性列做排序,隨機排序,order by rand()。
--結果排序(ordered results) SELECT column, another_column, … FROM mytable WHERE condition(s) ORDER BY column ASC/DESCLIMIT?和?OFFSET?子句通常和ORDER BY?語句一起使用,當我們對整個結果集排序之后,我們可以?LIMIT來指定只返回多少行結果 ,用?OFFSET來指定從哪一行開始返回。你可以想象一下從一條長繩子剪下一小段的過程,我們通過?OFFSET?指定從哪里開始剪,用?LIMIT?指定剪下多少長度。
-- limited查詢 SELECT column, another_column, … FROM mytable WHERE condition(s) ORDER BY column ASC/DESC LIMIT num_limit OFFSET num_offset;先按Year排列,后按Length_minutes排列
order bu Year,Length_minutes
4 多函數嵌套
--服務SELECT查詢語法 SELECT column, another_column, … FROM mytable WHERE condition(s) ORDER BY column ASC/DESC LIMIT num_limit OFFSET num_offset;eg?
--請輸入sql SELECT * FROM north_american_cities WHERE Longitude < (SELECT Longitude FROM North_american_cities WHERE City = 'Chicago') ORDER BY Longitude ASC;5??用JOINs進行多表聯合查詢
主鍵(primary key), 一般關系數據表中,都會有一個屬性列設置為?主鍵(primary key)。主鍵是唯一標識一條數據的,不會重復復(想象你的身份證號碼)。一個最常見的主鍵就是auto-incrementing integer(自增ID,每寫入一行數據ID+1, 當然字符串,hash值等只要是每條數據是唯一的也可以設為主鍵.
借助主鍵(primary key)(當然其他唯一性的屬性也可以),我們可以把兩個表中具有相同 主鍵ID的數據連接起來(因為一個ID可以簡要的識別一條數據,所以連接之后還是表達的同一條數據)(你可以想象一個左右連線游戲)。具體我們用到?JOIN?關鍵字。我們先來學習?INNER JOIN.
SELECT column, another_table_column, … FROM mytable (主表) INNER JOIN another_table (要連接的表)ON mytable.id = another_table.id (想象一下剛才講的主鍵連接,兩個相同的連成1條) WHERE condition(s) ORDER BY column, … ASC/DESC LIMIT num_limit OFFSET num_offset;?
?6?外連接(OUTER JOINs)
真實世界中兩個表存在差異很正常,所以我們需要更多的連表方式,也就是本節要介紹的左連接LEFT JOIN,右連接RIGHT JOIN?和 全連接FULL JOIN. 這幾個 連接方式都會保留不能匹配的行。
用LEFT/RIGHT/FULL JOINs 做多表查詢 SELECT column, another_column, … FROM mytable -- 從主表 INNER/LEFT/RIGHT/FULL JOIN another_table -- 級聯另一張表ON mytable.id = another_table.matching_id -- 用一個鍵值做鏈接的紐帶 WHERE condition(s) -- 篩選鍵值 ORDER BY column, … ASC/DESC -- 并以此排序 LIMIT num_limit OFFSET num_offset; -- 限定顯示多少條數據左側表A 連接右側 B,?LEFT JOIN保留A的所有行,不管有沒有能匹配上B
?RIGHT JOIN則保留所有右側B里的行,不管有沒有匹配上A
將兩個表數據1-1連接,保留A或B的原有行,如果某一行在另一個表不存在,會用 NULL來填充結果數據。所有在用這三個JOIN時,你需要單獨處理?NULL. 關于?NULL?下一節會做更詳細的說明
?
?7 NULL的處理
之前我們已經接觸過NULL. 在數據庫中,NULL表達的是 "無"的概念,或者說沒有東西。因為 NULL的存在,我們需要在編寫SQL時考慮到某個屬性列可能是 NULL的情況, 這種特殊性會造成編寫SQL的復雜性,所以沒有必要的情況下,我們應該盡量減少?NULL的使用,讓數據中盡可能少出現?NULL的情況。
如果某個字段你沒有填寫到數據庫,很可能就會出現NULL?。所有一個常見的方式就是為字段設置默認值,比如 數字的默認值設置為0,字符串設置為 ""字符串. 但是在一些NULL?表示它本來含義的場景,需要注意是否設置默認值還是保持NULL。 (f比如, 當你計算一些行的平均值的時候,如果是0會參與計算導致平均值差錯,是NULL則不會參與計算).
還有一些情況很難避免?NULL?的出現, 比如之前說的 outer-joining 多表連接,A和B有數據差異時,必須用?NULL?來填充。這種情況,可以用IS NULL和?IS NOT NULL?來選在某個字段是否等于?NULL.
NuLL值不會等于或者不等于任何值,甚至不能與其自身作比較。因此,不能使用=或!=來測試某一列的值是否為uLl。判斷一行是否含有NULL,必須使用 IS NuLL。你也可以使用 IS NOT NuLL來找到給定列的值不是NuLL的所有行
在查詢條件中處理 NULL SELECT column, another_column, … FROM mytable WHERE column IS/IS NOT NULL AND/OR another_condition AND/OR …;更改NULL為實際值
select coalesce(comm,0) from emp; -- 把comm字段的NULL改為0或者
select casewhen comm is not null then commelse 0end from emp高級指令
1 包含表達式
之前我們在SQL中的出現col_name(屬性名)的 地方,我們都只是寫上col_name自身。其實在SQL中可以用col_name的地方,都可以用表達式 來指定對屬性進行一定的計算或處理。舉個例子:假設有一個col_name是出生日期,現在要求SQL返回當前的年齡,這就可以用一個時間計算表達式對 出生日期做計算得到年齡。表達式可以對 數字運算,對字符串運算,也可以在表達式中只包含常量不包含col_name(如:SELECT 1+1)
-- 包含表達式的例子 SELECT particle_speed / 2.0 AS half_particle_speed -- (對結果做了一個除2,表達式取一個別名) FROM physics_data WHERE ABS(particle_position) * 10.0 >500(條件要求這個屬性絕對值乘以10大于500);每一種數據庫(mysql,sqlserver等)都有自己的一套函數,包含常用的數字,字符串,時間等處理過程.具體需要參看相關文檔。
當我們用表達式對col屬性計算時,很多事可以在SQL內完成,這讓SQL更加靈活,但表達式如果長了則很難一下子讀懂。所以SQL提供了AS關鍵字, 來給表達式取一個別名.
-- AS使用別名 SELECT col_expression AS expr_description, … FROM mytable; -- 屬性列和表取別名的例子 SELECT column AS better_column_name, … FROM a_long_widgets_table_name AS mywidgets INNER JOIN widget_salesON mywidgets.id = widget_sales.widget_id;?eg?
SELECT title,Id, (b.domestic_sales+b.international_sales)/1000000 AS Total FROM movies m LEFT JOIN Boxoffice b ON m.id = b.movie_id這個表達式作為一個字段命名: (b.domestic_sales+b.international_sales)/1000000 AS Total
movies m 把movies命名為m
?2?在查詢中進行統計
從這一節開始學習SQL如何對數據進行統計,SQL默認支持一組統計表達式,他們可以完成數據統計,如:計數,求平均等。 以Movies表數據為例,這些統計表達式可以幫我們回答以下問題:"Pixar公司生產了多少電影?", 或 "每一年的票房冠軍是誰?".
--對全部結果數據做統計 SELECT AGG_FUNC(column_or_expression) AS aggregate_description, … FROM mytable WHERE constraint_expression;?常見統計函數
| Docs:?MySQL,?Postgres,?SQLite,?Microsoft SQL Server |
?MySQL :: MySQL 8.0 Reference Manual
PostgreSQL: PostgreSQL 13.4, 12.8, 11.13, 10.18, 9.6.23, and 14 Beta 3 Released!
內置聚合功能 (sqlite.org)
Aggregate Functions (Transact-SQL) - SQL Server | Microsoft Docs
--下面介紹幾個常用統計函數:Function Description COUNT(*), COUNT(column) 計數!COUNT(*) 統計數據行數,COUNT(column) 統計column非NULL的行數. MIN(column) 找column最小的一行. MAX(column) 找column最大的一行. AVG(column) 對column所有行取平均值. SUM(column) 對column所有行求和.3 分組統計
GROUP BY?數據分組語法可以按某個col_name對數據進行分組,如:GROUP BY Year指對數據按年份分組, 相同年份的分到一個組里。如果把統計函數和GROUP BY結合,那統計結果就是對分組內的數據統計了.
GROUP BY?分組結果的數據條數,就是分組數量,比如:GROUP BY Year,全部數據里有幾年,就返回幾條數據, 不管是否應用了統計函數.
4 在查詢中進行統計
在?GROUP BY?分組語法中,我們知道數據庫是先對數據做WHERE,然后對結果做分組,如果我們要對分組完的數據再篩選出幾條如何辦? (想一下按年份統計電影票房,要篩選出>100萬的年份?)
一個不常用的語法?HAVING?語法將用來解決這個問題,他可以對分組之后的數據再做SELECT篩選.
-- 用HAVING進行篩選 SELECT group_by_column, AGG_FUNC(column_expression) AS aggregate_result_alias, … FROM mytable WHERE condition GROUP BY column HAVING group_condition;HAVING?和?WHERE?語法一樣,只不過作用的結果集不一樣. 在我們例子數據表數據量小的情況下可能感覺?HAVING沒有什么用,但當你的數據量成千上萬屬性又很多時也許能幫上大忙 .
5 SELECT條件邏輯,查詢后結果顯示一列
case when ... then ... else? ? ?end as...
總結
介紹完了所有查詢相關的語法,我們來把之前的所有語法集中到一個句子中.
-- 這才是完整的SELECT查詢SELECT DISTINCT column, AGG_FUNC(column_or_expression), … FROM mytable JOIN another_table ON mytable.column = another_table.column WHERE constraint_expression GROUP BY column HAVING constraint_expression ORDER BY column ASC/DESC LIMIT count OFFSET COUNT;一個查詢SQL的執行總是先從數據里按條件選出數據,然后對這些數據再次做一些整理處理,按要求返回成結果,讓結果盡可能是簡單直接的。因為一個 查詢SQL由很多部分組成,所以搞清楚這些部分的執行順序還挺重要的,這有助于我們更深刻的理解SQL執行過程.
查詢執行順序
1.?FROM?和?JOINs
FROM?或?JOIN會第一個執行,確定一個整體的數據范圍. 如果要JOIN不同表,可能會生成一個臨時Table來用于 下面的過程??傊谝徊娇梢院唵卫斫鉃榇_定一個數據源表(含臨時表)
2.?WHERE
我們確定了數據來源?WHERE?語句就將在這個數據源中按要求進行數據篩選,并丟棄不符合要求的數據行,所有的篩選col屬性 只能來自FROM圈定的表. AS別名還不能在這個階段使用,因為可能別名是一個還沒執行的表達式
3.?GROUP BY
如果你用了?GROUP BY?分組,那GROUP BY?將對之前的數據進行分組,統計等,并將是結果集縮小為分組數.這意味著 其他的數據在分組后丟棄.
4.?HAVING
如果你用了?GROUP BY?分組,?HAVING?會在分組完成后對結果集再次篩選。AS別名也不能在這個階段使用.
5.?SELECT
確定結果之后,SELECT用來對結果col簡單篩選或計算,決定輸出什么數據.
6.?DISTINCT
如果數據行有重復DISTINCT?將負責排重.
7.?ORDER BY
在結果集確定的情況下,ORDER BY?對結果做排序。因為SELECT中的表達式已經執行完了。此時可以用AS別名.
8.?LIMIT?/?OFFSET
最后?LIMIT?和?OFFSET?從排序的結果中截取部分數據.
結論
不是每一個SQL語句都要用到所有的句法,但靈活運用以上的句法組合和深刻理解SQL執行原理將能在SQL層面更好的解決數據問題,而不用把問題 都拋給程序邏輯.
答案轉載?
單表練習
SQL Lesson 1: SELECT 查詢 101
2. 找到所有電影的導演
SELECT Director FROM Movies;3. 找到所有電影的名稱和導演
SELECT Title,Director FROM Movies;4. 找到所有電影的名稱和上映年份
SELECT Title,Year FROM Movies;5. 找到所有電影的所有信息
SELECT * FROM Movies;6. 找到所有電影的名稱,Id和播放時長
SELECT Title,Id,Length_minutes FROM Movies;7. 請列出所有電影的ID,名稱和出版國(即美國)
SELECT Title,Id,'America' AS Country FROM movies;SQL Lesson 2: 條件查詢 (constraints) (Pt. 1)
2. 找到在2000-2010年間year上映的電影
SELECT * FROM movies WHERE Year BETWEEN 2000 AND 2010;3. 找到不是在2000-2010年間year上映的電影
SELECT * FROM movies WHERE Year NOT BETWEEN 2000 AND 2010;4. 找到頭5部電影
SELECT * FROM movies WHERE Id <= 5;5. 找到2010(含)年之后的電影里片長小于兩個小時的片子
SELECT * FROM movies WHERE Year >= 2010 AND Length_minutes < 120;6. 找到99年和09年的電影,只要列出年份和片長看下
SELECT Year,Length_minutes FROM Movies WHERE Year=1999 OR Year=2009;SQL Lesson 3: 條件查詢(constraints) (Pt. 2)
2. 找到所有John Lasseter導演的電影
SELECT * FROM Movies WHERE Director = 'John Lasseter';3. 找到所有不是John Lasseter導演的電影
SELECT * FROM Movies WHERE NOT Director = 'John Lasseter';4. 找到所有電影名為"WALL-"開頭的電影
SELECT * FROM Movies WHERE Title LIKE 'WALL-%';5. 有一部98年電影中文名《蟲蟲危機》請給我找出來
SELECT * FROM Movies WHERE Year = 1998;6. 找出所有Pete導演的電影,只要列出電影名,導演名和年份就可以
SELECT Title,Director,Year FROM Movies WHERE Director LIKE 'Pete%';7. John Lasseter導演了兩個系列,一個Car系列一個Toy Story系列,請幫我列出這John Lasseter導演兩個系列千禧年之后(含千禧年)的電影
SELECT * FROM Movies WHERE Director = 'John Lasseter' AND Year >= 2000;SQL Lesson 4: 查詢結果Filtering過濾 和 sorting排序
2. 列出按上映年份最新上線的4部電影
SELECT * FROM Movies ORDER BY Year DESC LIMIT 4;3. 按電影名字母序升序排列,列出前5部電影
SELECT * FROM Movies ORDER BY Title ASC LIMIT 5;4. 按電影名字母序升序排列,列出上一題之后的5部電影
SELECT * FROM Movies ORDER BY Title ASC LIMIT 5 OFFSET 5;5. 如果按片長排列,John Lasseter導演導過片長第3長的電影是哪部,列出名字即可
SELECT Title FROM Movies ORDER BY Length_minutes ASC LIMIT 1 OFFSET 3 where Director='John Lasseter';6. 按導演名字母升序,如果導演名相同按年份降序,取前10部電影給我
SELECT * FROM Movies ORDER BY Director ASC,Year DESC LIMIT 10;SQL Review: 復習 SELECT 查詢
2. 列出所有美國United States的城市按緯度從北到南排序(包括所有字段)
SELECT * FROM North_american_cities WHERE Country = 'United States';3. 列出所有在Chicago西部的城市,從西到東排序(包括所有字段)
SELECT * FROM North_american_cities WHERE Longitude < (SELECT Longitude FROM North_american_cities WHERE City = 'Chicago') ORDER BY Longitude ASC;4. 用人口數population排序,列出墨西哥Mexico最大的2個城市(包括所有字段)
SELECT * FROM North_american_cities WHERE Country = 'Mexico' ORDER BY Population DESC LIMIT 2;5. 列出美國United States人口3-4位的兩個城市和他們的人口(包括所有字段)
SELECT * FROM North_american_cities WHERE Country = 'United States' ORDER BY Population DESC LIMIT 2 OFFSET 2;6. 北美所有城市,請按國家名字母序從A-Z再按人口從多到少排列看下前10位的城市(包括所有字段)
SELECT * FROM North_american_cities ORDER BY Country ASC,Population DESC LIMIT 10;多表練習
SQL Lesson 6: 用JOINs進行多表聯合查詢
2. 找到所有國際銷售額比國內銷售大的電影
SELECT * FROM movies inner join Boxoffice on Movies.id=Boxoffice.Movie_id where International_sales > Domestic_sales3. 找出所有電影按市場占有率rating倒序排列
SELECT * FROM movies inner join Boxoffice on Movies.id=Boxoffice.Movie_id order by Rating desc4. 每部電影按國際銷售額比較,排名最靠前的導演是誰,線上銷量多少
SELECT Director,International_sales FROM movies inner join Boxoffice on Movies.id=Boxoffice.Movie_id order by International_sales desc limit 1SQL Lesson 7: 外連接(OUTER JOINs)
2. 找到所有辦公室和它們的最大容量
SELECT * FROM Buildings3. 找到所有辦公室里的所有角色(包含沒有雇員的),并做唯一輸出(DISTINCT)
SELECT DISTINCT Building_name, Role FROM Buildings LEFT JOIN Employees ON Buildings.Building_name = Employees.Building;4. 找到所有有雇員的辦公室(buildings)和對應的容量
SELECT DISTINCT Building,Capacity FROM Employees INNER JOIN Buildings ON employees.Building=Buildings.Building_name;SQL Lesson 8: 關于特殊關鍵字 NULLs
2. 找到還沒有雇員的辦公室
SELECT DISTINCT Building_name FROM Buildings LEFT JOIN Employees ON Building_name = Building WHERE Role IS NULL;SQL Lesson 9: 在查詢中使用表達式
2. 列出所有的電影ID,名字和市場指數(Rating的10倍為市場指數)
SELECT Id,Title,Rating*10 AS Market_indices FROM Movies m LEFT JOIN Boxoffice b ON m.id=b.movie_id;3. 列出所有偶數年份的電影,需要電影ID,名字和年份
SELECT Id,Title,Year FROM Movies WHERE Year%2=04. John Lasseter導演的每部電影每分鐘值多少錢,告訴我最高的3個電影名和價值就可以
SELECT Title,(b.Domestic_sales+b.International_sales)/m.Length_minutes AS Per_sales FROM Movies m LEFT JOIN Boxoffice b on m.Id=b.Movie_id WHERE Director='John Lasseter' ORDER BY Per_sales DESC LIMIT 35. 電影名最長的3部電影和他們的總銷量是多少,使用函數(length())
SELECT m.title,length(Title), (b.domestic_sales+b.international_sales) as Sum_sales FROM Movies m LEFT JOIN Boxoffice b ON m.id=b.movie_id ORDER BY length(Title) DESC LIMIT 3;SQL Lesson 10: 在查詢中進行統計I (Pt. 1),常用函數有count,MAX,MIN,AVG,SUM
2. 按角色(Role)統計一下每個角色的平均就職年份
SELECT Role,AVG(Years_employed) FROM Employees GROUP BY Role;3. 按辦公室名字總計一下就職年份總和
SELECT Building, SUM(Years_employed) FROM Employees GROUP BY Building;4. 每棟辦公室按人數排名,不要統計無辦公室的雇員
SELECT Building,COUNT(*) FROM Employees WHERE Building GROUP BY Building;5. 就職1,3,5,7年的人分別占總人數的百分比率是多少(給出年份和比率"50%" 記為 50)
SELECT Years_employed,count()*100 / (SELECT count(Name) FROM Employees) as Ratio FROM employees WHERE Years_employed in(1,3,5,7) GROUP BY Years_employedSQL Lesson 11: 在查詢中進行統計II (Pt. 2)
2. 按角色統計一下每個角色的雇員數量
SELECT Role, COUNT() FROM Employees GROUP BY Role;3. 計算出Engineer角色的就職年份總計
SELECT SUM(Years_employed) FROM Employees WHERE Role='Engineer';4. 按角色分組算出每個角色按有辦公室和沒辦公室的統計人數(列出角色,數量,有無辦公室,注意一個角色如果部分有辦公室,部分沒有需分開統計)
SELECT Role,CASE when Building is NOT NULL THEN '1' ELSE '0' END AS Have,COUNT(Name) FROM Employees GROUP BY Role,Have;5. 按角色和就職年份統計人數,年份按0-3,3-6,6-9這種階梯分組,最后按角色+階梯分組排序
SELECT Role,Years_employed/3 AS Year, COUNT(Name) FROM Employees GROUP BY Role,Year ORDER BY Year ASC;SQL Lesson 12: 查詢執行順序
2. 統計一下每個導演的銷售總額(列出導演名字和銷售總額)
SELECT Director,SUM(b.Domestic_sales+b.International_sales) AS Sum_Sales FROM Movies m LEFT JOIN Boxoffice b ON m.Id = b.Movie_id GROUP BY Director;3. 按導演分組計算銷售總額,求出平均銷售額冠軍(統計結果過濾掉只有單部電影的導演,列出導演名,總銷量,電影數量,平均銷量)
SELECT director,SUM(b.domestic_sales+b.international_sales) as Sum_sales, count(title) as Total, sum(b.domestic_sales+b.international_sales)/count(title) AS average FROM Movies m LEFT JOIN Boxoffice b ON m.Id = b.Movie_id GROUP BY Director HAVING COUNT(Title) > 1 ORDER BY Average DESC LIMIT 1;4. 找出每部電影和單部電影銷售冠軍之間的銷售差,列出電影名,銷售額差額
SELECT Title, (SELECT MAX(Domestic_sales+International_sales) FROM Boxoffice) - SUM(Domestic_sales+International_sales) AS Diff FROM Movies INNER JOIN Boxoffice ON Movies.ID = Boxoffice.Movie_id GROUP BY Title;總結
以上是生活随笔為你收集整理的mySQL全指令学习记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: metaRTC嵌入式webrtc编程指南
- 下一篇: MySQL基础(尚硅谷笔记)