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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值