构建 SQL 语句求助

2015-09-20 17:03:57 +08:00
 bestsanmao
现有一个表 用来记录某软件的客户端登录日志
字段有
time,username,ip,hwid

hwid 意思是 hardware id ,也就是软件登录时所在的终端的机器码
现在我想做这么个查询:

查询出来的结果类似于这样
张三,10
李四,8
王五,5

也就是说,查询各个用户名在多少台终端上登录过(不同的 hwid 值代表不同的终端),并以台数进行排序
上面就表示张三在 10 台终端上登录过,李四在 8 台终端上登录过

请问这样的 sql 应该怎么写呢?
3292 次点击
所在节点    MySQL
13 条回复
asxalex
2015-09-20 17:27:27 +08:00
select tmp.username, count (1 ) cnt from (select username, count (1 ) from table_name group by username, hwid ) tmp group by tmp.username order by cnt desc;
ttcool
2015-09-20 17:33:38 +08:00
select tab.username,count (tab.hwid ) from (select username,hwid from test group by hwid ) tab group by tab.username;
cxbig
2015-09-20 17:40:33 +08:00
没有楼上没那么复杂吧
SELECT username, count (hwid )
FROM table
GROUP BY username
SilentDepth
2015-09-20 18:11:37 +08:00
@cxbig 同感。再加个 ORDER BY 就更好了
coosir
2015-09-20 18:17:31 +08:00
@cxbig @SilentDepth 额,这样子同终端的多次登录都会 count 进去呀
liprais
2015-09-20 18:56:41 +08:00
伸手党可耻
echo1937
2015-09-20 19:16:35 +08:00


MySQL 的写法.
soulgeek
2015-09-20 19:23:21 +08:00
3 楼的 count 加个 distinct 就好了
cxbig
2015-09-20 19:55:20 +08:00
了解了,用 time 来做 count
SELECT DISTINCT username, hwid, count ($time )
FROM table
GROUP BY username, hwid
SilentDepth
2015-09-20 20:31:58 +08:00
@cxbig 楼主的意思是要统计各 username 对应了多少种 hwid

这样的话如 8 楼 @soulgeek 所说, COUNT (DISTINCT hwid )就可以了
cxbig
2015-09-20 20:34:40 +08:00
@SilentDepth 楼上正解,我记错了
SilentDepth
2015-09-20 20:39:54 +08:00
@cxbig 左括号前加空格可以理解,为什么右括号前也要加……什么时候回复可以支持代码展示啊 :sigh:
cxbig
2015-09-20 21:42:37 +08:00
@SilentDepth 自动给的,我没有办法。 T-T

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/222199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX