mysql distinct和mysql group by count谁更好

顺便提下mysql的DISTINCT的关键字有很多你想不到的用处
1.在count 不重复的记录的时候能用到
比如SELECT COUNT( DISTINCT id ) FROM
就是计算talbebname表中id不同的记录有多少条2,在需要返回记录不同的id的具体值的时候可以用
比如SELECT DISTINCT id FROM
返回talbebname表中不同的id的具体的值3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义
比如SELECT DISTINCT id, type FROM
实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的5.其实还有另外一种解决方式,就是使用
SELECT id, type, count(DISTINCT id) FROM tablename
虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据)
返回的结果是 只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了PS:
越来越发现有很多细节是需要去探究的,
越来越发现自己写文字真的很杂乱,
有空研究下DISTINCT的效率
添加新评论 &
(3) (4) (9) (19) (10) (29) (91) (164) (28)
妈妈说不要和木JJ的人随便说话
Powered by& & 表 table1& & id RegName PostionSN PersonSN& & 1 山东齐鲁制药 223 2& & 2 山东齐鲁制药 224 2& & 3 北京城建公司 225 2& & 4 科技公司 225 2& & 我想获得结果是& & id RegName PostionSN PersonSN& & 1 山东齐鲁制药 223 2& & 3 北京城建公司 225 2& & 4 科技公司 225 2& & select distinct RegName,PostionSN,PersonSN from table1& & 如果查询的是多列 distinct 用和不用一样& & 只能用group by& & 用group by RegName& & select * from table1 where id in (select min(id) from table1 group by RegName) and PersonSN=2& & 您可能感兴趣的文章:oracle sql 去重复记录不用distinct如何实现使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCTsqlserver中distinct的用法(不重复的记录)使用distinct在mysql中查询多条不重复记录值的解决办法解析mysql中:单表distinct、多表group by查询去除重复记录& & QQ空间
百度搜藏更多& & Tags:distinct group by& & 复制链接收藏本文打印本文关闭本文返回首页& & 上一篇:SQL中函数 replace 的参数1的数据类型ntext无效的解决方法& & 下一篇:SQL SERVER 2000通讯管道后复用劫持& & 相关文章SQL Server利用bcp命令把SQL语句结果生成文本文件sqlserver 数据库连接字符串中的可选项收集union组合结果集时的order问题sql server日期相减 的实现详解大数据量分页存储过程效率测试附测试代码与结果SQL 返回期间内的所有日期sql多表行转列、级联行转列示例代码sql 语句练习与答案IN&EXISTS与NOT IN&NOT EXISTS 的优化原则小结SQLSERVER的版本信息和SP补丁信息查看方法& & 文章评论& & 最 近 更 新& & 还原sql server数据库的处理方法mssql存储过程表名和字段名为变量的实现方Sql 批量查看字符所在的表及字段SQL SERVER 自增列sqlserver获取各种形式的时间SQL Server正则表达式 替换函数应用详解sqlserver substring函数使用方法小结SQL语句导入导出大全SQL Server误区30日谈 第29天 有关堆碎片SQLServer中用T—SQL命令查询一个数据库中& & 热 点 排 行& & SQL Server 2008图文安装教程SQL Server 2012 安装图解教程(附sqlserver中distinct的用法(不重SQL Server导入、导出、备份数据SQL语句去掉重复记录,获取重复记SQL Server数据库入门学习总结SQL Server错误代码大全及解释(sql convert函数使用小结sql 时间函数 整理的比较全了用SQL语句添加删除修改字段、一些
声明:该文章系网友上传分享,此内容仅代表网友个人经验或观点,不代表本网站立场和观点;若未进行原创声明,则表明该文章系转载自互联网;若该文章内容涉嫌侵权,请及时向
上一篇:下一篇:
相关经验教程
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.001 收益
的原创经验被浏览,获得 ¥0.005 收益在mysql中删除查询重复记录的方法有很多种,我们常用的就有GROUP BY与distinct两个函数来操作,下面我来给大家介绍具体操作过程,有需要了解的朋友可参考参考。 我们先来看查询重复记录
SELECT *&& FROM (&& SELECT *&& FROM dede_archives&& ORDER BY id DESC&& )arc, dede_soft b&& WHERE arc.id = b.aid&& GROUP BY `shorttitle`&& ORDER BY `id` DESC&& LIMIT 0 , 30&&
删除的话也很简单的了
delete from people where peopleid in ( peopleid from people
peopleid having count(peopleid) & 1) and rowid not in (select min(rowid) from people group by peopleid having count(peopleid )&1)
例id name1 a2 b3 c4 c5 b完整语句放出:
select *, count(distinct name) from table group by name结果:id name count(distinct name)1 a 12 b 13 c 1
原来还有更简单的办法啊。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&MySQL中distinct及group&by的一些用法&分享
TABLE `student`
(&&&&&&&&&&&&&&&&&
&&&&&&&&&&
`name` varchar(20) NOT NULL DEFAULT '',
&&&&&&&&&&
`age` int(10) DEFAULT
'0'&&&&&&&&&&&&&&
) ENGINE=InnoDB DEFAULT CHARSET=latin1
select * from
用distinct过滤掉两列都相同的记录
select distinct name,
将表student的数据改为如下:
select distinct name,
返回如下,说明distinct后面有多于一列的字段时,只有每列的值完全相同才过滤
name age height
group by按两列同时分组
select name,age,sum(height) from student group by
group by按两列同时分组,同时在后面加上having的条件
select name,age,sum(height) as n from student group by name,age
having n & 500;
关于group by后面limit的测试
select songname,sengerid,count(sengerid) as n from t_song group by
songname,sengerid having n & 1 ORDER BY n DESC,songid ASC limit
共同渡过&&
风继续吹&&
倩女幽魂&&
无心睡眠&&
罗百吉超嗨派对连续组曲&&
拒绝再玩&&
风再起时&&
每天爱你多一些&&
千言万语&&
select songname,sengerid,count(sengerid) as n from t_song group by
songname,sengerid having n & 1 ORDER BY n DESC,songid ASC limit
共同渡过&&
风继续吹&&
倩女幽魂&&
无心睡眠&&
经过以上两个测试可以看出,如果sql语句中含有limit,limit是对用group
by进行分组,并进行相关计算以后的limit操作,而不是对limit后面的指定记录数进行分组,从n那一列的数据每一行的值都大于10就可以看出来。
用以下的两种形式的distinct均可以得到相同的记录数,写法不一样,结果是一样的。
select count(distinct(songid))
select count(distinct songid)
field singername is
string,max(singername),如果singername有些列为空,有些列不为空,则max(singername)取非空的值,如果一列为zxx,一列为lady,则取zxx,按字母顺利取的。
select feedback_id,songid,songname,max(singername),max(time) as
new_time from feedback group by songid order by new_time
7.Sql语句中where,group
by,order by及limit的顺序
where xxx,group by xxx,order by xxx,limit xxx
8.关于group
by与count的问题
如果sql语句中含有group by,则最好不要将count sql转换为select count(*) from
xxx,否则select与from之间的字段很有可能是后面要使用的,例如
select feedback_id,songid,songname,max(singername),max(time) as
new_time from feedback group by songid order by new_time
MySQL Query Error: SELECT COUNT(*) FROM feedback GROUP BY songid
ORDER BY new_time DESC Error Info:Unknown column 'new_time' in
'order clause'
转载于http://iamcaihuafeng./.html
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&正文
MySQL中group_concat函数
本文通过实例介绍了MySQL中的group_concat函数的使用方法,比如select group_concat(name) 。MySQL中group_concat函数完整的语法如下:group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
基本查询 mysql& select *+------+------+| id| name |+------+------+|1 | 10||1 | 20||1 | 20||2 | 20||3 | 200& ||3 | 500& |+------+------+6 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔(默认) mysql& select id,group_concat(name)+------+--------------------+| id| group_concat(name) |+------+--------------------+|1 | 10,20,20||2 | 20 ||3 | 200,500|+------+--------------------+3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,分号分隔 mysql& select id,group_concat(name separator ';')+------+----------------------------------+| id| group_concat(name separator ';') |+------+----------------------------------+|1 | 10;20;20 ||2 | 20||3 | 200;500& |+------+----------------------------------+3 rows in set (0.00 sec)
以id分组,把去冗余的name字段的值打印在一行, 逗号分隔
mysql& select id,group_concat(distinct name)+------+-----------------------------+| id| group_concat(distinct name) |+------+-----------------------------+|1 | 10,20||2 | 20& ||3 | 200,500 |+------+-----------------------------+3 rows in set (0.00 sec)
以id分组,把name字段的值打印在一行,逗号分隔,以name排倒序 mysql& select id,group_concat(name order by name desc)+------+---------------------------------------+| id| group_concat(name order by name desc) |+------+---------------------------------------+|1 | 20,20,10& ||2 | 20||3 | 500,200|+------+---------------------------------------+3 rows in set (0.00 sec)
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:

我要回帖

更多关于 mysql sum group by 的文章

 

随机推荐