首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
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
V2EX  ›  MySQL

MySQL 相同用户不同的金额 如果在一个区间中 统计为一次应该怎么写?

  •  
  •   771456556 · 58 天前 · 1470 次点击
    这是一个创建于 58 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假设这是示例表

    统计 money 范围在 1-2 的人

    那么

    [王] 应该是 1

    [李] 应该是 1

    [马] 应该是 0

    就是说只要在范围内,不管出现几次,都统计为一次。

    12 回复  |  直到 2019-02-20 16:55:15 +08:00
        1
    liprais   58 天前   ♥ 1
    把 money 弄成区间不就行了
    case when money > 1 and money < 2 then 'a' 这样
        2
    771456556   58 天前 via iPhone
    @liprais 现在的需求比这个复杂,不定区间查询(可能会有十几个区间查询),最后还要汇总数据,我想着发个帖子,看有没有人实现一下,然后我根据他的代码再改改。
        3
    Mistwave   58 天前 via iPhone   ♥ 1
    可以用 sgn

    -- MySQL
    SELECT user, sign(count(*))
    FROM your_table
    WHERE money >= 1 AND money <= 2
    GROUP BY user
        4
    771456556   58 天前
    @Mistwave #3 谢谢您,明天我上班试试
        5
    TommyLemon   58 天前   ♥ 1
    你的表述有问题。按照下方的示例,应该是根据用户名(user)来分组。
    SELECT count(*) FROM 表名 WHERE money BETWEEN 1 AND 2 GROUP BY user
        6
    TommyLemon   58 天前   ♥ 1
    @TommyLemon
    看错你的意思了,#3 楼方法测试可行。还可以
    SELECT user,EXISTS(SELECT 1 FROM 表名 AS U2 WHERE U2.user=U1.userAND sex=1) FROM 表名 AS U1 GROUP BY user
        7
    TommyLemon   58 天前   ♥ 1
    @TommyLemon
    SELECT user,EXISTS(SELECT 1 FROM 表名 AS U2 WHERE U2.user=U1.user AND money BETWEEN 1 AND 2) FROM 表名 AS U1 GROUP BY user
        8
    771456556   58 天前
    @TommyLemon #5 谢谢谢谢,是我的问题,mysql 不够熟练。把事情想复杂了
        9
    771456556   58 天前
    @TommyLemon #5 您第一个方法也可以,

    select
    count(*) as total
    from
    ( SELECT * FROM `u`
    WHERE money BETWEEN 3 AND 5 GROUP BY user) a


    这样直接可以计算出符合区间内所有人的总数量。
    3#的方法也不错。
        10
    771456556   58 天前
    @771456556

    select
    count(*) as total
    from
    ( SELECT * FROM 表名
    WHERE money BETWEEN 1 AND 2 GROUP BY user) a
        11
    771456556   58 天前
    解决了,其实本质就是去重。。。当时想歪了,可以直接筛选出在范围内的人,然后用 group by 或者 count DISTINCT 来去重。
        12
    Chenamy2017   58 天前
    group
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3821 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 16ms · UTC 09:27 · PVG 17:27 · LAX 02:27 · JFK 05:27
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1