› 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
uyhsefwa
V2EX  ›  MySQL

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

  •  
  •   uyhsefwa · Feb 19, 2019 · 4386 views
    This topic created in 2785 days ago, the information mentioned may be changed or developed.

    假设这是示例表

    统计 money 范围在 1-2 的人

    那么

    [王] 应该是 1

    [李] 应该是 1

    [马] 应该是 0

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

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

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

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


    这样直接可以计算出符合区间内所有人的总数量。
    3#的方法也不错。
    uyhsefwa
        10
    uyhsefwa  
    OP
       Feb 20, 2019
    @771456556

    select
    count(*) as total
    from
    ( SELECT * FROM 表名
    WHERE money BETWEEN 1 AND 2 GROUP BY user) a
    uyhsefwa
        11
    uyhsefwa  
    OP
       Feb 20, 2019
    解决了,其实本质就是去重。。。当时想歪了,可以直接筛选出在范围内的人,然后用 group by 或者 count DISTINCT 来去重。
    Chenamy2017
        12
    Chenamy2017  
       Feb 20, 2019
    group
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1091 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 17:11 · PVG 01:11 · LAX 10:11 · JFK 13:11
    ♥ Do have faith in what you're doing.