› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
xuyl
V2EX  ›  MySQL

sql 查询问题求教

  •  
  •   xuyl · Mar 23, 2016 · 2880 views
    This topic created in 3863 days ago, the information mentioned may be changed or developed.

    有个数据表 userlog 如下:

    userlog

    需要查询组装成如下表格:

    result

    5 replies  •  2016-03-23 14:14:41 +08:00
    halfcrazy
        1
    halfcrazy  
       Mar 23, 2016
    select user, count(*) as cnt, logintime from userlog order by cnt desc, logintime asc group by user
    idblife
        2
    idblife  
       Mar 23, 2016
    select user, count(*) ,min(logintime),max(logintime) from userlog
    jhdxr
        3
    jhdxr  
       Mar 23, 2016
    直接 select *,登录次数自己写代码统计即可(一个 string-int 的 map , key 是用户, value 是次数)
    klesh
        4
    klesh  
       Mar 23, 2016   ❤️ 1
    目测一楼的 sql 不行
    select user group by user 是可以,其它的字段必须是 aggregate function. select logintime 是不行的。另外 order 需要在 group 后面

    1.分两次查询
    SELECT user, count(*) AS cnt FROM userlog GROUP BY user ORDER BY cnt;
    SELECT logintime FROM userlog WHERE user=? ORDER BY logintime;

    2.利用 GROUP_CONCAT ( mysql 用得少,未实测,不保证书写正确)
    SELECT user, count(*) AS cnt, GROUP_CONCAT(logintime SEPARATOR '\n' ORDER BY logintime) AS logintimes FROM userlog GROUP BY user ORDER BY cnt;
    xuyl
        5
    xuyl  
    OP
       Mar 23, 2016
    @klesh 感谢,第二种类方法可用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5534 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:43 · PVG 15:43 · LAX 00:43 · JFK 03:43
    ♥ Do have faith in what you're doing.