项目中遇到的mysql group by having

1、group 不要 组内,组外排序;

组内排序(若order by it.addtime ASC 写入groupby 后,不创建临时表,那么是分组之后的排序):

组内排序(http://blog.csdn.net/shellching/article/details/8292338):

SELECT
	*
FROM
	(
		SELECT
			it.money,
			it.user_id
		FROM
			table1 it
		LEFT JOIN table2 p ON p.iuser_uid = it.user_id
		LEFT JOIN table3 act ON act.activities_code = p.plat
		WHERE
			(act.pid = 14)
		AND (
			(it.addtime >= 1467734400)
			AND (it.addtime < 1467993600)
		)
		AND (
			(it.money >= 0)
			AND (it.money <= 10000000000)
		)
		ORDER BY
			it.addtime ASC
	) AS i
GROUP BY
	i.user_id;



组外排序:

SELECT
	it.money,
	it.user_id
FROM
	table1 it
LEFT JOIN table2 p ON p.iuser_uid = it.user_id
LEFT JOIN table3 act ON act.activities_code = p.plat
WHERE
	(act.pid = 14)
AND (
	(it.addtime >= 1467734400)
	AND (it.addtime < 1467993600)
)
AND (
	(it.money >= 0)
	AND (it.money <= 10000000000)
)
GROUP BY
	it.user_id
ORDER BY
	it.addtime ASC




2、having分组

错误的写法举例(mysql error: Invalid use of group function):

SELECT
	sum(it.money) as sum_money,
	it.user_id
FROM
	table1 it
LEFT JOIN table2 p ON p.iuser_uid = it.user_id
LEFT JOIN table3 act ON act.activities_code = p.plat
WHERE
	(act.pid = 14)
AND (
	(it.addtime >= 1467734400)
	AND (it.addtime < 1467993600)
)
AND (
	(sum(it.money) >= 0)
	AND (sum(it.money) <= 10000000000)
)
GROUP BY
	it.user_id
;



对于上语句,应采用having来进行记录刷选(参考: http://www.jb51.net/article/32562.htm):

SELECT
	sum(it.money) as sum_money,
	it.user_id
FROM
	table1 it
LEFT JOIN table2 p ON p.iuser_uid = it.user_id
LEFT JOIN table3 act ON act.activities_code = p.plat
WHERE
	(act.pid = 14)
AND (
	(it.addtime >= 1467734400)
	AND (it.addtime < 1467993600)
)
GROUP BY
	it.user_id
HAVING
	(sum(it.money) >= 0)
	AND (sum(it.money) <= 10000000000)
;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值