1. 程式人生 > >mysql group_concat 分組,多欄位統一排序及輸出資料到java

mysql group_concat 分組,多欄位統一排序及輸出資料到java

本文不涉及mysql的配置,bean的建立和使用,資料庫連線等教程,僅介紹group_concat輸出到java
假設我們有如下資料
這裡寫圖片描述
目標:輸出goodsId為1002,已顏色分組的資料。

首先編輯一下sql語句

String sql ="SELECT serialNumber,goodsId,fatherGoodsId,"
                + "GROUP_CONCAT(goodsCode) goodsCode,color,GROUP_CONCAT(CONVERT(size,char)) size,GROUP_CONCAT(CONVERT(stock,char)) stock,"
                + "
GROUP_CONCAT(CONVERT(price,char)) price,FROM goods_tb WHERE goodsId=1002 group by color";

然後假設有個bean

public class GoodsBean {
//如果資料庫裡的欄位型別為bigint。要對應到jva的BigInteger,欄位需要設定無符號。如果是有符號,對應java使用 long型別去接收。
    private BigInteger serialNumber;
    private String color;
    private int goodsId;
    private
int fatherGoodsId; private String goodsCode; private String size; private String stock; private String price;//因為分組返回的是集合結果,是字串,不是單個的資料,所以集合用String接收 //set和get這裡不寫了。自己寫

重點在於GROUP_CONCAT(CONVERT(size,char)) size類似如此的語句。
如果sql語句中只有GROUP_CONCAT(CONVERT(size,char)) 這樣的。沒有size。那麼bean接收不到資料,
以String size變數為例:
當GROUP_CONCAT(CONVERT(size,char)) 這樣的語句在命令介面中輸出顯示為:
這裡寫圖片描述


這樣的結果集,上圖顯示的GROUP_CONCAT(CONVERT(size,char)) ,用bean接收為空物件。也就是獲取不到資料。網上說返回的是Blob型別,本人沒試過,不清楚。

正確的語句GROUP_CONCAT(CONVERT(size,char)) size輸出結果為
這裡寫圖片描述

GROUP_CONCAT(CONVERT(size,char)) size 語句只是保證了輸出資料的正確性。
真正分組的語句是group by color
如果沒有group by color。命令介面顯示的結果 只有一個顏色的記錄。
這裡寫圖片描述
從上圖看出,size欄位輸出並不是我們想要的。它包含了另一個顏色的size資料。

我們知道了如何輸出可以在java獲取到的語句。就可以用bean接收了。
假設有個函式 searchSql 形參為String sql。返回型別為list。

public List<GoodsBean> searchSql (String sql){
    List<GoodsBean> mGoodsBean;
    //連線資料庫,查詢
    //對應到bean程式碼
    return mGoodsBean;
}

那麼我們就可以這麼寫

List<GoodsBean> goodsBean = new ArrayList<GoodsBean>();
goodsBean = (List<GoodsBean>) searchSql(sql);

順便提一下。
如果想要所有組合欄位輸出結果,都是按照一種排序方式。
比如說都是按照ORDER BY size DESC.,按size欄位降序排序
那麼你要在 sql語句中出現group_concat 的地方都加上ORDER BY size DESC
GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size GROUP_CONCAT(CONVERT(stock,char) ORDER BY size DESC) stock

若只設置GROUP_CONCAT(CONVERT(size,char) ORDER BY size DESC) size ,其他group_concat的地方不設定。那麼設定的欄位會排序,其他欄位不會排序。

關於如何詳細使用group_concat ,自行度娘。不再贅述。
本文為會心煩部落格原創,轉載註明處出!

相關推薦

mysql group_concat 分組統一排序輸出資料到java

本文不涉及mysql的配置,bean的建立和使用,資料庫連線等教程,僅介紹group_concat輸出到java 假設我們有如下資料 目標:輸出goodsId為1002,已顏色分組的資料。 首先編輯一下sql語句 String sql ="SEL

for xml path 與 group_concat 與 WM_CONCAT合併成一行資料

  -- sql server,自定義用逗號分割 SELECT     id,     psn = (stuff (( SELECT ',' + realname FROM staff_tbl WHERE psn = 'c0c

MYSQL左連線合併一對關係操作

mysql合併欄位用concat,將多個數據合併為一個欄位用group_concat,切記group_concat要與group by連用,這樣資料就不會只剩下一條。。。例子:                selecta.*, concat(c.provencie,c.ci

php mysql ajax 單表關鍵詞查詢

單表多欄位查詢在一些稍微複雜一點的查詢中十分有用。本文主要利用MySQL資料庫中的concat函式實現單表多欄位多關鍵詞查詢。並且顯示查詢結果的表格可根據所選資料表動態生成。 html程式碼 <!DOCTYPE html> <html> <h

如何從mysql資料庫中查詢指定且符合條件的資料 然後拼接成json字串最後匯出json檔案

SELECT CONCAT("{'name':'",IFNULL(Name,''),"',","'sex':'",IFNULL(Sex,''),"',","'age':'",IFNULL(Age,''),"',", "'phone':'",IFNULL(Phon

mysql列轉行合併

資料表:  列轉行:利用max(case when then) max---聚合函式 取最大值 (case course when '語文' then score else 0 en

ElasticSearch權重排序居然可以這麼玩

## 背景 **讀者提問:ES 的權重排序有沒有示列,參考參考?** 剛好之前也稍微接觸過,於是寫了這篇文章,可以簡單參考下。 在很多複雜的業務場景下,排序的規則會比較複雜,單一的降序,升序無法滿足日常需求。不過 ES 中提供了給文件加權重的方式來排序,還是挺好用的。 首先初始化三條測試資料,方便檢視

excel如何對資料進行同時排序條件組合和條件篩選呢

對資料的排序不僅可以是對單列或單行進行排序,還可以進行多欄位同時排序,從而達到想要的效果。excel如何對資料進行多欄位同時排序、多條件組合和多條件篩選呢如圖所示 【解決方法,教程視訊資料如下】 本教程視訊資料來源:http://edu.51cto.com/course/15404.html 完整部落格

LINQ使用Orderby、ThenBy實現排序

LINQ中的排序操作符,包括:OrderBy、OrderByDescending、ThenBy、ThenByDescending、Reverse,提供了升序或者降序排序。 OrderBy:按升序對序列的元素進行排序。 OrderByDescending:按降序對序列的元素排序。 ThenBy:按

mysql資料庫的簡單增刪改查合併拼接字元操作java完成將一張表中的查詢結果合併存入另一張表的指定

首先問題描述:我現在有兩個表,一個表是關鍵詞,一個表是含有關鍵詞的標籤,需要做的就是在關鍵詞表中新建一個標籤欄位,把包含該關鍵詞的全部標籤存入其中。比如關鍵詞是Java,標籤可能有Java開發,Java後臺等。我這裡關鍵詞有4000個,標籤有40000個,我用了小段java程式碼+sql的函式就完成

mysql查詢去重

當資料表有主鍵時,使用group by 獲取相同欄位的最大主鍵即可,code如下: SELECT rn.* FROM table_name rn WHERE rn.id IN ( SELECT MAX(r.id) from table r GROUP BY a,b,c,d )

資料庫工作筆記010---Mysql中用SQL增加、刪除修改名、型別、註釋調整順序總結

  JAVA技術交流QQ群:170933152   Mysql中用SQL增加、刪除欄位,修改欄位名、欄位型別、註釋,調整欄位順序總結   在網站重構中,通常會進行資料結構的修改,所以新增,刪除,增加mysql表的欄位是難免的,有時為了方便,還會增加

mysql搜尋模糊查詢

select parttime_job_business_assessments.*, u.nick_name, u.mobile, pj.name as job_name, b.name as business_name from `parttime_job_business_assess

知識點:mysql查詢資料做加、減、乘、除null的四則運算為null

該處不羅列出每種情況,以減法、加法、乘法為例,說明該情況: 展示emp表: 1、減法: select empno,ename,sal-200 from emp; 2、乘法: select empno,ename,sal*12 from emp;    

mysql中兩個int建立聯合索引沒有用到索引

這兩天有一個任務表 t_task_list ,搜尋條件下面都有,相關的索引也有,但就是用不到索引,應該是跟資料分佈有關,所以對索引做了調整。 最重要的不是對索引做了調整,而是,不要以為建了索引就一定能用到,還是根據資料的分佈情況來決定的,以後多注意吧,有慢查詢,一定看sql,看expl

Hive分組取Top N且保留某列不相同記錄

  一、問題背景   1.先吐槽一下中國聯通自己的大資料開放能力平臺提供的計算叢集,Hive用的1.1,Spark用的1.5,Kafka0.8,我的天吶,原始的讓人抓狂,好多已經寫好的模型都要重寫......   2.資料格式   第一列是device_number,第

EF求和(分組/不分組

分組多欄位求和 query.GroupBy(q => new { q.Year, q.Month }) .Select(q => new { Year = q.Key.Year, Month = q.Key.Month, Bu

mysql 排序

1、排序關鍵字 ASC:升序; DESC:降序; 2、單欄位排序 單欄位降序 SELECT * FROM USER ORDER BY id DESC; 3、多欄位排序 多欄位排序只需要新增多個排序條件,並且每個排序的條件之前用逗號分開。 SELEC

簡單查詢資料庫減輕資料庫壓力

最近在查詢標籤收費記錄時,要在列表中顯示車牌號資訊,而車牌號資訊在標籤資訊記錄表中,於是需要查詢標籤資訊記錄,最原始的做法: 獲取分頁的一頁記錄資料,迴圈遍歷得出標籤收費記錄物件,然後通過標籤收費記錄中的標籤ID來查詢標籤資訊物件,儲存在List物件中: List v

mysql查詢資料不重複distinctdistinct的操作

轉載自 【http://www.jb51.net/article/77997.htm】 MySQL通常使用GROUPBY(本質上是排序動作)完成DISTINCT操作,如果DISTINCT操作和ORDERBY操作組合使用,通常會用到臨時表.這樣會影響效能. 在一些情況下,M