group by和having使用示例
阅读数:105 评论数:0
跳转到新版页面分类
数据库
正文
一、概述
在ANSI SQL中,如果使用了group by子句,出现在select子句中的必须是统计函数或group by子句中的列名称,可以结合having子句过滤掉一些不符合条件的结果。
二、单字段
Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1
count(*)与count(1) 其实没有什么差别,用哪个都可以
count(*)与count(列名)的区别:
count(*)将返回表格中所有存在的行的总数包括值为null的行,然而count(列名)将返回表格中除去null以外的所有行的总数(有默认值的列也会被计入)
Select * From 表 Where 重复字段 In (Select 重复字段 From 表 Group By 重复字段 Having Count(*)>1)
DELETE
FROM
dept
WHERE
dname IN (
SELECT
t.dname
FROM
(
SELECT
dname
FROM
dept
GROUP BY
dname
HAVING
count(1) > 1
) t
)
AND deptno NOT IN (
SELECT
dt.mindeptno
FROM
(
SELECT
min(deptno) AS mindeptno
FROM
dept
GROUP BY
dname
HAVING
count(1) > 1
) dt
)
--方式二
DELETE
FROM
dept
WHERE
deptno NOT IN (
SELECT
dt.minno
FROM
(
SELECT
MIN(deptno) AS minno
FROM
dept
GROUP BY
dname
) dt
)
--方式三
DELETE
FROM
table_name AS ta
WHERE
ta.唯一键 <> (
SELECT
t.maxid
FROM
( SELECT max( tb.唯一键 ) AS maxid FROM table_name AS tb WHERE ta.判断重复的列 = tb.判断重复的列 ) t
);
三、多字段
单个字段的如果会了,多个字段也非常简单。就是将group by 的字段增加为你想要的即可。
此处只写一个,其他方法请仿照一个字段的写即可。
DELETE
FROM
dept
WHERE
(dname, db_source) IN (
SELECT
t.dname,
t.db_source
FROM
(
SELECT
dname,
db_source
FROM
dept
GROUP BY
dname,
db_source
HAVING
count(1) > 1
) t
)
AND deptno NOT IN (
SELECT
dt.mindeptno
FROM
(
SELECT
min(deptno) AS mindeptno
FROM
dept
GROUP BY
dname,
db_source
HAVING
count(1) > 1
) dt
)
相关推荐
Centos7的yum源中没有mysql,为了解决这个问题,我们需要先下载mysql的repo源。
一、下载mysql的repo源并安装
wget http://repo.mysql.com/mysq
如果主库已经投入使用了,此时如果需要主从同步,需要导出所表结构和数据,然后导入到从库中。这时需要注意修改/var/lib/mysql/auto.cnf中uuid。
master配
一、事务的ACID
1、Atomicity原子性
Transactions are often composed of multiple statements. Atomicity guarantee
一、登录mysql
mysql --version
-查看Mysql版本
mysql -h hostname -u username -p
-h:运行mysql服务器的机器,如果正在该机器上运行此命令
一、语法
select [optioins] items
[into file_details]
from tables
[where conditions]
[group by gr
一、语法
update [low_priority] [ignore] tablename
set column1=expression1,...
[where condition]
[order b
一、语法
1、基本语法
alter table [ignore] tablename alteration [,alteration...]
(1)ignore,如果会导致唯一键重复,则这些操作将自动