Mysql数据库sql分组查询语句
sql分组查询语句
以下详情介绍实际开发过程中写的两个分组查询语句:1.根据编码进行分组查询。2.对分组的结果进行循环查询。
根据编码进行分组查询
一、业务需求
根据车系编码有无查询车系/车型集合(不传车型编码按车系分组;传车系编码按其下车型进行分组)
二、代码详情
1.Car.xml文件代码如下:
<!--根据车系编码有无查询车系车型列表且排除竞品车(car_type:1不是竞品车;2是竞品车)-->
<!--提示:分组时使用max()函数主要是解决分组字段和返回字段不一致引起的报错问题-->
<select id="getModelsCarList" parameterType="java.lang.String" resultType="com.***.***.dto.ModelVo">
SELECT * FROM
<choose>
<!--按某车系下的车型进行分组-->
<when test="seriesCode != null and seriesCode != ''">
(SELECT c.series_code, c.model_code, MAX(c.model_name) model_name, MAX(c.model_id) model_id
FROM models_car c GROUP BY c.series_code, c.model_code) AS tt
where tt.series_code = #{seriesCode}
</when>
<otherwise>
<!--按车系编码分组-->
(SELECT c.series_code, MAX(c.series_name) series_name, MAX(c.series_id) series_id, MAX(c.car_type) car_type
FROM models_car c GROUP BY c.series_code) AS tt where tt.car_type = 1
</otherwise>
</choose>
</select>
2.CarMapper.java文件代码如下:
/**
* 根据车系编码有无查询车系/车型集合(不传车型编码按车系分组;传车系编码按其下车型进行分组)
* @param seriesCode
* @return
*/
List<ModelVo> getModelsCarList(String seriesCode);
对分组的结果循环查询
一、业务需求
根据字符串车系/车型名称数组查询对应编码集合
二、代码详情
1.Car.xml文件代码如下:
<!--根据字符串车系或者车型名称数组查询对应编码集合(传进来的是字符串数组String[])-->
<!--提示:分组时使用max()函数主要是解决分组字段和返回字段不一致引起的报错问题-->
<select id="getCarCodeByName" resultType="com.***.***.dto.ModelVo">
SELECT * FROM
<!--判断为车系编码查询,即按车系编码分组-->
<if test="type == 'series'">
(SELECT c.series_code, MAX(c.series_name) series_name FROM models_car c GROUP BY c.series_code) as tt
<where>
<if test="seriesOrModelNameList != null ">
<!--传字符串车系名称数组-->
<foreach collection="seriesOrModelNameList" item="item">
<if test="item != null and item != ''">
or tt.series_name = #{item}
</if>
</foreach>
</if>
</where>
</if>
<!--判断为车型编码查询,即按车型编码分组-->
<if test="type == 'model'">
(SELECT c.model_code, MAX(c.model_name) model_name FROM models_car c GROUP BY c.model_code) as tt
<where>
<if test="seriesOrModelNameList!= null ">
<!--传字符串车型名称数组-->
<foreach collection="seriesOrModelNameList" item="item">
<if test="item != null and item != ''">
or tt.model_name = #{item}
</if>
</foreach>
</if>
</where>
</if>
</select>
2.CarMapper.java代码如下:
/**
* 根据字符串车系或者车型名称数组查询对应编码集合
* @param type(类型分为:series、model)
* @param seriesOrModelNameList
* @return
*/
List<ModelVo> getCarCodeByName(@Param(value="type") String type, @Param(value="seriesOrModelNameList") String[] seriesOrModelNameList);