mysql右连接,判断大小

SELECT  (CASE when c.billcycle>c.firstzm THEN c.billcycle ELSE c.firstzm END )AS firstzm,c.thirdzm,c.secondzm 
FROM
	(SELECT *
		FROM (
			SELECT CAST(MONTH(billcycle) AS CHAR)AS billcycle,CAST(COUNT(MONTH(billcycle)) AS CHAR) AS thirdzm 
			FROM tb_ac_billpaid_yym 
			WHERE 
				(SELECT MONTH(billcycle))>(select MONTH(NOW())-4) AND (select MONTH(billcycle))<=(select MONTH(NOW())) 
				GROUP  BY CAST(MONTH(billcycle) AS CHAR)) AS a 
	RIGHT JOIN 
		(SELECT CAST(MONTH(billcycle) AS CHAR)AS firstzm,CAST(COUNT(MONTH(billcycle)) AS CHAR) AS secondzm 
		 FROM tb_ac_billunpaid
		 WHERE 
			(SELECT MONTH(billcycle))>(select MONTH(NOW())-4) AND (select MONTH(billcycle))<=(select MONTH(NOW())) 
			GROUP  BY CAST(MONTH(billcycle) AS CHAR)) AS b 
	ON a.billcycle=b.firstzm) 
AS c

对于我这样一个菜鸟我都佩服我能写出这样的sql语句。

下面我来解释一下我的这段sql语句的意思:

      首先分别从两个表中查出自己需要的数据:

(1)

			SELECT CAST(MONTH(billcycle) AS CHAR)AS billcycle,CAST(COUNT(MONTH(billcycle)) AS CHAR) AS thirdzm 
			FROM tb_ac_billpaid_yym 
			WHERE 
				(SELECT MONTH(billcycle))>(select MONTH(NOW())-4) AND (select MONTH(billcycle))<=(select MONTH(NOW())) 
				GROUP  BY CAST(MONTH(billcycle) AS CHAR)
(2)
SELECT CAST(MONTH(billcycle) AS CHAR)AS firstzm,CAST(COUNT(MONTH(billcycle)) AS CHAR) AS secondzm 
		 FROM tb_ac_billunpaid
		 WHERE 
			(SELECT MONTH(billcycle))>(select MONTH(NOW())-4) AND (select MONTH(billcycle))<=(select MONTH(NOW())) 
			GROUP  BY CAST(MONTH(billcycle) AS CHAR)

这两段sql有异曲同工之处,就是在查询的时候我修改了字段的类型为char型,因为我的实体类中是String型,所以我必须修改一下字段类型;查询的条件是当前月以及前四个月。

    然后,根据月份将两个表右连接起来。

    最后一步,我是根据两个表中,月份大的为字段,查出了所有数据。

在写的时候我出现了一个问题,就是case语句还不够熟悉,case的语法是:case  when then else end;千万记住end不能少。不然就会像我一样报错咯!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值