mysql 查询一张表某个字段 数据量重复次数最多的 前10条数据

Luffy666 发布于 2013/09/08 20:14
阅读 10K+
收藏 2

查询ip字段 数据重复最多的前10条    sql语句应该要这么写啊~!

加载中
0
wartskcaj
wartskcaj

select count(*) repeats ,t.* 

from table t

group by t.ip

order by repeats desc

limit 0,10

0
Luffy666
Luffy666

引用来自“jackstraw”的答案

select count(*) repeats ,t.* 

from table t

group by t.ip

order by repeats desc

limit 0,10

不对啊,兄弟
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
这里让想起一件事情,好像MySql可以这样子分组的。select * from (select count(*) repeats, t.* from table t group by t.ip) t_1 order by t_1.repeats limit 0,10;
wartskcaj
wartskcaj
group by t.ip 是查询ip重复最多的 group by t.phone是查询手机号重复最多的
0
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
select * from (
select count(1) t_counts, t.ip
from tab_1 t
group by t.ip
order by count(1) desc
) t_1 limit(0, 10);
0
Luffy666
Luffy666

引用来自“不喜欢吃素的菜鸟”的答案

select * from (
select count(1) t_counts, t.ip
from tab_1 t
group by t.ip
order by count(1) desc
) t_1 limit(0, 10);
没看懂啊,也不对~!
0
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
select * from (
	select * 
	from tbl_1 t_3 
	left join (
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	order by t_2.t_counts desc nulls last 
) t_4 
limit (0, 10);
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
MySql不怎么会,不知道MySql有没有nulls last,nulls first,rowid之类的东西,我说的在oracle有。
0
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
/*取前10条*/
select * from (
	/*以为t_2表的数据每条唯一,所以联表查询时并不会出现重复数据,并对数据排序。
	 *也就是说联表后的数据条数是不变的,只是查询出来的列多了。
	 */
	select * 
	from tbl_1 t_3 
	left join (
		/*以ip进行分组,统计每个Ip的总次数*/
		/*这个语句的每个ip都是唯一的。*/
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	order by t_2.t_counts desc nulls last 
) t_4 
limit (0, 10);
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
说实话,我没看完你的题目,我只是想以ip分组。 个人觉得你应该把图片和描述离开点,隔个3、4行样子。
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
你可以将nulls last去掉的,这句没作用。
0
Luffy666
Luffy666

引用来自“不喜欢吃素的菜鸟”的答案

/*取前10条*/
select * from (
	/*以为t_2表的数据每条唯一,所以联表查询时并不会出现重复数据,并对数据排序。
	 *也就是说联表后的数据条数是不变的,只是查询出来的列多了。
	 */
	select * 
	from tbl_1 t_3 
	left join (
		/*以ip进行分组,统计每个Ip的总次数*/
		/*这个语句的每个ip都是唯一的。*/
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	order by t_2.t_counts desc nulls last 
) t_4 
limit (0, 10);
这里就一张表
0
Luffy666
Luffy666

引用来自“luthon”的答案

引用来自“不喜欢吃素的菜鸟”的答案

/*取前10条*/
select * from (
	/*以为t_2表的数据每条唯一,所以联表查询时并不会出现重复数据,并对数据排序。
	 *也就是说联表后的数据条数是不变的,只是查询出来的列多了。
	 */
	select * 
	from tbl_1 t_3 
	left join (
		/*以ip进行分组,统计每个Ip的总次数*/
		/*这个语句的每个ip都是唯一的。*/
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	order by t_2.t_counts desc nulls last 
) t_4 
limit (0, 10);
这里就一张表
你仔细看下图
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
报错的话,将nulls last去掉。洗澡去了,有事留言。
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
结果对吗。 你刚学sql?
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
我这里也是一张表啊,你可以将查询出来的结果当一张表,如: select * from (select * from tbl_1) t_2; 真正的表只有tbl_1,t_2可以看做是临时表。
0
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
select * from (
	select * 
	from tbl_1 t_3 
	left join (
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	/*这句才是正确的,我想了下。
	 *如果nulls last报错,你去掉nulls last。
	 *前面的语句会在某些条件下存在问题。
	 *如果这里还有错误,请指出。
	 */
	order by case when t_2.t_counts is null then 0 else t_2.t_counts end desc
) t_4 
limit (0, 10);

0
Luffy666
Luffy666

引用来自“不喜欢吃素的菜鸟”的答案

select * from (
	select * 
	from tbl_1 t_3 
	left join (
		select count(1) t_counts, t.ip n_ip
		from tbl_1 t 
		group by t.ip
	) t_2 on t_3.ip = t_2.n_ip 
	/*这句才是正确的,我想了下。
	 *如果nulls last报错,你去掉nulls last。
	 *前面的语句会在某些条件下存在问题。
	 *如果这里还有错误,请指出。
	 */
	order by case when t_2.t_counts is null then 0 else t_2.t_counts end desc
) t_4 
limit (0, 10);

我有点晕,t_2   t_3  t_counts  什么意思啊
不喜欢吃素的菜鸟
不喜欢吃素的菜鸟
没什么,就个别名而已。
返回顶部
顶部