【问题标题】:mysql query returns wrong for grouped datamysql查询对分组数据返回错误
【发布时间】:2014-04-20 20:14:46
【问题描述】:

这是名为matches的mysql表。它包含用户投注的比赛、发布日期和结果(赢、输等)。

通过第一次查询,我会在用户个人资料上显示他按月份分组的投注

SELECT COUNT(*),date,SUM(stake), AVG(stake),result 
FROM matches 
WHERE u_id='$id11' 
GROUP BY DATE_FORMAT(date, '%Y/%m') 
ORDER BY DATE_FORMAT(date, '%Y/%m') DESC 
LIMIT $startrow,10

现在我需要做的是显示这些赌注中赢了多少,输了多少,如下图所示

最好的方法是什么?

我已经尝试添加另一个查询,看起来像这样

SELECT COUNT(*) 
FROM matches WHERE u_id='$id11' AND result='win' 
GROUP BY DATE_FORMAT(date, '%Y/%m') 
ORDER BY DATE_FORMAT(date, '%Y/%m') DESC LIMIT $startrow,10

对每个结果都进行相同的查询,但问题是 lats 说本月没有输掉的赌注,它本月没有返回任何东西,而且表格看起来顺序错误。

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    如何在一个查询中获得所有赢/输,您的 where 过滤器正在过滤结果,因此您不会得到查询的结果以丢失匹配

    SELECT 
     SUM(result='win') `win_count`,
     SUM(result='lost') `lost_count`
    FROM matches 
    WHERE u_id='$id11'  
    GROUP BY DATE_FORMAT(date, '%Y/%m') 
    ORDER BY DATE_FORMAT(date, '%Y/%m')
    DESC LIMIT $startrow,10
    

    在上面的查询中,我使用了 SUM 函数和一个表达式,当在 SUM 中使用表达式时,它将产生一个布尔值,如果表达式为真,则为 1,如果表达式结果为假,则为 0,换句话说,你可以使用您的条件简单地通过 sum 函数获得计数

    【讨论】:

    • 你太棒了,如此简单的解决方案。非常感谢你。
    猜你喜欢
    • 2015-02-14
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-16
    • 2013-11-07
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    相关资源
    最近更新 更多