mysql - 按累积列值对 mysql 结果进行分组

标签 mysql sql-server

我有一个数据库表events 和一个表bets。针对特定赛事的所有投注均位于bets 表中,而有关赛事的信息则存储在events 表中。

假设我有这些表:

events table:
id    event_title
1     Call of Duty Finals
2     DOTA 2 Semi-Finals
3     GTA V Air Race


bets table:
id    event_id    amount
1     1           $10
1     2           $50
1     2           $100
1     3           $25
1     3           $25
1     3           $25

我希望能够按受欢迎程度(即该赛事的下注数量)和奖品(即该赛事的总金额)进行排序。

按奖品排序

显然这个查询不起作用,但我想做这样的事情:

SELECT * FROM bets GROUP BY event_id SORT BY amount
上述查询中的

amount 应该是该 event_id 的所有投注金额加在一起的累积值,因此此查询将返回

Array (
    [0]=>Array(
            'event_id'=>2
            'amount'=>$150
        )

    [1]=>Array(
            'event_id'=>3
            'amount'=>$75
        )
    [2]=>Array(
            'event_id'=>1
            'amount'=>$10
        )
)

按受欢迎程度排序

显然这个查询也不起作用,但我想做这样的事情:

SELECT * FROM bets GROUP BY event_id SORT BY total_rows
上面查询中的

total_rows 应该是 bets 表中存在的行数加在一起,因此此查询将返回

Array (
    [0]=>Array(
            'event_id'=>3
            'total_rows'=>3
        )

    [1]=>Array(
            'event_id'=>2
            'total_rows'=>2
        )
    [2]=>Array(
            'event_id'=>1
            'total_rows'=>1
        )
)

我不一定需要它返回 total_rows 值,因为我可以计算该值,但它确实需要按特定 event_id 的出现次数进行排序> 在赌注表中。

最佳答案

我认为 count 和 sum 是你的 friend :

SELECT COUNT(event_id) AS NumberBets, 
    SUM(amount) AS TotalPrize
FROM bets
GROUP BY event_id

应该可以解决问题。 然后您可以根据需要按投注数(受欢迎程度)或总奖金进行排序。仅当您想要事件标题时才需要加入。

关于mysql - 按累积列值对 mysql 结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34867721/

相关文章:

c# - 获取表中插入行的实时提要

sql-server - 将 MAXDOP 添加到 Linq to Entities

sql - 当本地数据库上没有 -S 参数时,SQL 命令中的 BCP 给出 NativeError = 2

html - 将 URL 参数与 mySQL 和 JSP 一起使用时出现错误

mysql - 优化mysql巨表

c# - 如何将日期时间插入时间(0)字段

sql - 在存储过程中向表中插入常量值

php - Ajax 无法与 wpdb 一起使用

php - yii2 下拉列表 onchange

mysql - 如何删除两个重复的列