SQL查询问题,急!

_小蜗牛 2014-10-31 05:53:04

用的是MySQL数据库,

有一张日志表,表名:t_log
字段:id bigint primary key,
userid bigint
url varchar(1000)

其中id为主键,userid是用户iid,userid字段的值是可为空并可重复的;url是用户访问的链接,可为空,可重复。现在要查询每个用户访问量最大的url的记录,SQL语句该怎么写呢?
我写的Sql为:select * from t_log
group by userid,url
order by count(url) desc
这样只能查出按每个用户访问url次数倒序排列的所有记录,现在只想让它显示每个用户访问次数最多的url的记录。能用SQL实现吗?
多谢~!
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_小蜗牛 2014-11-04
  • 打赏
  • 举报
回复
很好地解决了这个问题,谢谢!
ACMAIN_CHM 2014-11-03
  • 打赏
  • 举报
回复
mysql> select * from t_log;
+----+--------+---------------------------+
| id | userid | url                       |
+----+--------+---------------------------+
|  1 |    101 | http://www.baidu.com/     |
|  2 |    101 | http://www.baidu.com/     |
|  3 |    101 | http://www.google.com.hk/ |
|  4 |    201 | http://www.google.com.hk/ |
|  5 |    201 | http://www.baidu.com/     |
|  6 |    201 | http://www.google.com.hk/ |
|  7 |    201 | http://www.so.com/        |
+----+--------+---------------------------+
7 rows in set (0.00 sec)

mysql> select userid,url
    -> from (
    ->  select userid,url,count(*) as k
    ->  from t_log
    ->  group by userid,url
    ->  order by k desc
    -> ) v
    -> group by userid;
+--------+---------------------------+
| userid | url                       |
+--------+---------------------------+
|    101 | http://www.baidu.com/     |
|    201 | http://www.google.com.hk/ |
+--------+---------------------------+
2 rows in set (0.08 sec)

mysql>
_小蜗牛 2014-11-03
  • 打赏
  • 举报
回复
好的。

数据库:MySQL
数据版本:5.6.20

CREATE TABLE `t_log` (
`id` bigint(20) NOT NULL,
`userid` bigint(20) DEFAULT NULL,
`url` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `t_log_record` VALUES
(1,101,'http://www.baidu.com/'),
(2,101,'http://www.baidu.com/'),
(3,101,'http://www.google.com.hk/'),
(4,201,'http://www.google.com.hk/'),
(5,201,'http://www.baidu.com/'),
(6,201,'http://www.google.com.hk/'),
(7,201,'http://www.so.com/');

想要得到每个用户访问次数最多的url的记录。如以上插入的测试数据中,想要得到的查询结果为:










ACMAIN_CHM 2014-10-31
  • 打赏
  • 举报
回复
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。 参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382 1. 你的 create table xxx .. 语句 2. 你的 insert into xxx ... 语句 3. 结果是什么样,(并给以简单的算法描述) 4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL) 这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
CT_LXL 2014-10-31
  • 打赏
  • 举报
回复
引用 楼主 shinningGrass 的回复:

select t1.* from 
(select userid,url,count(id)cnt from t_log group by userid,url) t1,
(select userid,max(cnt)max_cnt from (select userid,url,count(id) cnt from t_log group by userid,url)t1 group by userid) t2 
where ifnull(t1.userid,1)=ifnull(t2.userid,1) and t1.cnt=t2.max_cnt ;

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧