首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Coding
V2EX  ›  问与答

请教一个 mysql 查询问题!

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

    弱弱地问一个基础的 mysql 问题。我写的 sql 语句只查询出了根据日期分组的单日男性女性在表中分别有多少条记录。而不是男性女性分别有多少人。(因为其中的一些记录 ID 是重复的,也就是同一个人有多条不同的记录。)
    我想要统计出每天男性女性分别有多少人?我要如何修改我的 sql 语句呢? 还是说我这样的表设计是有问题的呢?


    hangzhou 表

    结果

    我想要的结果是
    2019-4-25 2 2
    2019-4-29 2 2
    18 回复  |  直到 2019-09-09 17:26:27 +08:00
        1
    xingyue   93 天前 via Android   ♥ 2
    distinct
        2
    itIsUnbelievable   93 天前
    @xingyue 我试过了,没有用
        3
    mringg   93 天前   ♥ 1
    count 改为 sum
        4
    justfindu   93 天前   ♥ 1
    SELECT
    SUM( IF ( sex = male, 1, 0 ) ) AS male_count,
    SUM( IF ( sex = female, 1, 0 ) ) AS female
    FROM
    `TABLE`
    GROUP BY
    date
        5
    itIsUnbelievable   93 天前
    @justfindu 你这个的结果和我那个是一样的。还是没有对 uid 进行去重
        6
    itIsUnbelievable   93 天前
    @mringg 还是一样的结果,因为 4-25 日那天是有 2 个用户 id 重复的,所以统计人数的时候要去掉重复的,所以我就找不到方向了。distinct 也没有用,很难受(⊙﹏⊙)
        7
    cnoder   93 天前   ♥ 1
    select sex,count(1) as gender_num from hangzhou where id in (select id from hangzhou group by uid,date) GROUP BY sex
    如果不报 onlyfullgroupby 的错误应该可以,另外性别应该用 gender
        8
    polymerdg   93 天前   ♥ 1
    group by date,uid
        9
    noahsophie   93 天前
    group by sex,date
        10
    noahsophie   93 天前   ♥ 1
    看错了,8 楼正解
        11
    itIsUnbelievable   93 天前
    @cnoder <img src="http://tva1.sinaimg.cn/large/007X8olVly1g6t8ijkmptj30pm05k0sp.jpg">

    <br>
    你的查询结果是这个,这个不是只统计出了表中男女性别的记录条数,没有去重的效果,而且日期也不是按照我结果的样式,这个问题也太难了吧,感觉我 mysql 好菜呀
        12
    itIsUnbelievable   93 天前
    @polymerdg
    <img src="http://tva1.sinaimg.cn/large/007X8olVly1g6t8zeedkqj30kh09iq35.jpg">
    这个我之前也试过,不过结果不对。
        13
    itIsUnbelievable   93 天前
    偷偷地顶一下....
        14
    justfindu   93 天前
    @itIsUnbelievable group by 再加上 uid 就行了
        15
    x66   93 天前   ♥ 1
    @itIsUnbelievable #13
    SELECT t.date,count(case when t.sex ='male' then 1 end ) male,count(case when t.sex ='female' then 1 end ) female
    from (
    SELECT date,uid,sex from test1 GROUP BY date,uid,sex
    ) t GROUP BY t.date
        16
    itIsUnbelievable   93 天前
    @x66 老哥秀啊,这么多回答就你这个靠谱,谢谢老哥
        17
    haozxuan001   93 天前
    都是些什么神仙呀,
    你把你的 THEN 1 改成 THEN distinct (id)岂不是改动最小的?
        18
    haozxuan001   93 天前
    手抖了,distinct(uid)
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4273 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 39ms · UTC 03:01 · PVG 11:01 · LAX 19:01 · JFK 22:01
    ♥ Do have faith in what you're doing.