sql語句怎么進(jìn)行分組查詢 sql多條件分組查詢,求sql語句?
sql多條件分組查詢,求sql語句?sql多條件分組查詢舉例: 比如有兩張表: 表一: 姓名 分?jǐn)?shù) —————— 李一 2 李二 1 李三 1 張一 3 張二 2 張三 2 …… 表二: 姓 —— 李
sql多條件分組查詢,求sql語句?
sql多條件分組查詢舉例: 比如有兩張表: 表一: 姓名 分?jǐn)?shù) —————— 李一 2 李二 1 李三 1 張一 3 張二 2 張三 2 …… 表二: 姓 —— 李 張 王 要查詢表二中的姓的數(shù)據(jù)對表一進(jìn)行分組,然后將分?jǐn)?shù)統(tǒng)計出來。
sql語句寫法如下: SELECT b. NAME, sum(a.score) AS 分?jǐn)?shù) FROM tb1 a LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name` GROUP BY b. NAME 這個是Mysql的寫法 Oracle把SubStr函數(shù)改一下就可以了。使用SQL語句進(jìn)行分組檢索時,為了去掉不滿足條件的分組,應(yīng)當(dāng)()?
1。使用排序使數(shù)據(jù)有序
通常,你的所有數(shù)據(jù)真正需要的僅僅是按某種順序排列。SQL的ORDER BY語句可以以字母或數(shù)字順序組織數(shù)據(jù)。因此,相似的值按組排序在一起。然而,這個分組時排序的結(jié)果,并不是真的分組。ORDER BY顯示每條記錄而分組可能代表很多記錄。
2。進(jìn)行分組除去重復(fù)值
排序和分組之間的最大區(qū)別是:排序的數(shù)據(jù)顯示所有記錄(在限定標(biāo)準(zhǔn)范圍之內(nèi)),而分組數(shù)據(jù)不是顯示所有記錄。GROUP BY語句對于同樣的值只顯示一條記錄。例如,下面的語句中的GROUP BY語句對數(shù)據(jù)源中重復(fù)出現(xiàn)的數(shù)據(jù)只返回唯一的zip編碼列。
SELECT ZIP FROM Customers GROUP BY ZIP
只包括由GROUP BY和SELECT語句共同定義的那些記錄,換句話說,SELECT列表必須滿足GROUP BY列表,但是有一個例外就是SELECT列表可以包含聚合函數(shù)(GROUP BY語句不允許使用聚合函數(shù))。
需要注意的是GROUP BY語句不會對結(jié)果分組進(jìn)行排序。為了使分組按字母或數(shù)字有序排列,需要添加ORDER BY語句。此外,在GROUP BY語句中不能引用使用了別名的字段。分組欄目必須是潛在的數(shù)據(jù),但它們并不需要顯示在結(jié)果中。
3。在分組之前進(jìn)行數(shù)據(jù)篩選
你可以添加一個WHERE語句來篩選有GROUP BY所得分組中的數(shù)據(jù)。
例如,下面的語句只返回肯塔基州顧客的唯一ZIP編碼列。
SELECT ZIP FROM CustomersWHEREState = ’KY’ GROUP BY ZIP
必須注意的是WHERE語句是在GROUP BY語句求值之前進(jìn)行數(shù)據(jù)過濾的。
與GROUP BY語句一樣,WHERE語句也不支持聚合函數(shù)。
4。返回所有分組
當(dāng)你使用WHERE語句過濾數(shù)據(jù)時,結(jié)果分組中只顯示你指定的那些記錄,而符合分組定義但是不滿足過濾條件的數(shù)據(jù)不會包含在某個分組中。當(dāng)你想在分組中包含所有數(shù)據(jù)時添加關(guān)鍵字ALL即可,這時WHERE條件就不起作用。
例如,在前面的例子中添加關(guān)鍵字ALL就會返回所有的ZIP分組,而不是僅在肯塔基州的那些。