group系列 之前覺得這裡簡單不需要再進行總結了。後來發現還是需要總結鞏固一下,還是有一些方法之類的之前未使用過。這裡來重新整理,記錄一下。 group by 將表中的數據根據某個條件進行分組。 比如下麵這張表: 如果我們按照班級進行分組 那麼數據將會是這樣的: 通過mysql執行表格數據進行校驗 ...
group系列
之前覺得這裡簡單不需要再進行總結了。後來發現還是需要總結鞏固一下,還是有一些方法之類的之前未使用過。這裡來重新整理,記錄一下。
group by
將表中的數據根據某個條件進行分組。
比如下麵這張表:
如果我們按照班級進行分組 那麼數據將會是這樣的:
通過mysql執行表格數據進行校驗:
select classname ,GROUP_CONCAT(id,name,courseName,score SEPARATOR '%') from winfun GROUP BY classname;
運行結果:
group_concat()
待會再總結。
根據group by的特性,這也是為什麼通過group by進行分組後,我們對數據操作需要藉助一些函數。
分組後數據變成了一行中包含多條數據,沒辦法在mysql中通過表格表現出來。
concat_ws()函數
caoncat_ws()函數可以把欄位之間拼接起來
官網示例:
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name');
-> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name');
-> 'First name,Last Name'
功能就是將字元串通過自己設定的分隔符拼接起來:
select CONCAT_WS(',,,','he','ll','o');
運行結果:
group_concat()函數
在group by中使用過該函數,它可以把通過group by分組後後面的數據拼接起來。
通過group by分組後的數據:
如果我們按照classname分組,那麼分組後當前組的數據,就是group_concat()的主要拼接對象。
group_concat()語法:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
示例sql:
select classname ,GROUP_CONCAT(id,name,courseName,score ORDER BY score SEPARATOR '%') from winfun
GROUP BY classname;
group_caoncat(要拼接的數據[,要拼接的數據...] [order by column desc|asc] SEPARATOR 'string')
-- SEPARATOR 這裡設置每條數據間的分割符
運行結果:
這裡我們可以和上面的concat_ws()函數
一起來使用:
select classname ,GROUP_CONCAT(CONCAT_WS(' | ',id,name,courseName,score) ORDER BY score SEPARATOR '%') from winfun GROUP BY classname;
運行結果: