项目中遇到的mysql group by having
2016-07-09 14:34
537 查看
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)
;
组内排序(若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)
;
相关文章推荐
- Mysql服务启动遇到“某些服务启动后自动停止”的问题的解决方案
- MySQL配置文件my.cnf参数优化和中文详解
- php示例代码之使用mysqli对象
- php示例代码之使用MySQLi接口
- php示例代码之使用mysql_fetch_object函数
- php示例代码使用mysql_fetch_assoc函数
- php示例代码之使用list函数和mysql_fetch_row函数
- Mysql Binlog三种格式介绍及分析
- php示例代码之 使用PHP的MySQL标准函数
- WordPress忘记账户密码最简单的解决方案
- mysql无法远程连接到数据库解决方法
- MySQL事务处理实现方法步骤
- Mysql windows版本的安装
- 2003 - Can connect to MySQL server on localhost (10038)mysql 读取描述文件失败 错误代码:2【亲测可用】
- mysql主从同步延迟优化大全
- 解决Mysql数据库插入数据出现问号(?)的解决办法
- 操作数据表中的记录(增删改查)
- mysql安装图解 mysql图文安装教程(详细说明)
- mysql的备份与恢复
- mysql: update字段中带select