php - 检索两个 SUM(col) JOIN ON 不同值的商

标签 php mysql sql pdo

抱歉,标题令人困惑,不知道如何表达。

我有一个赛事表以及对这些赛事的投注表。我已经获取了每项赛事的总投注额,但我还想获取赔率(又名,一支球队的总投注额除以另一支球队的总投注额的商)。下注的参与者存储在 data_bets 表的 horse 列中。

例如,我想添加如下内容:

SELECT 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant
AS bet_odds

下面是我现有的查询:

SELECT *,
   SUM(data_bets.amount) AS total_pot,
   COUNT(data_bets.member) AS total_bets,
   COUNT(data_votes.member) AS total_votes,
   data_platforms.name AS platform_name, data_platforms.icon AS platform_icon
FROM data_events
   LEFT JOIN data_bets ON data_bets.event=data_events.id
   LEFT JOIN data_votes ON data_votes.content_type=2 AND data_votes.content_id=data_events.id
   LEFT JOIN data_platforms ON data_platforms.id=data_events.platform
WHERE status=1
GROUP BY data_events.id
ORDER BY total_pot DESC

这可以通过一个查询来完成吗?如果可能的话,我更愿意同时获取 challenger_oddscontestant_odds,如下所示:

SELECT 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant
AS challenger_odds, 
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.contestant
    /
    SUM(data_bets.amount) WHERE data_bets.horse = data_events.challenger
AS contestant_odds

最佳答案

使用条件聚合:

SELECT (SUM(CASE WHEN data_bets.horse = data_events.challenger THEN data_bets.amount ELSE 0 END)  /
        SUM(CASE WHEN data_bets.horse = data_events.contestant THEN data_bets.amount END) 
       ) as bet_odds

关于php - 检索两个 SUM(col) JOIN ON 不同值的商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37647666/

相关文章:

MySQL:从具有 View 的多个表中查询数据

mysql - 一个时间范围内的 SQL 查询

月/年报表的sql查询

PHP:如何使用类函数?

php - 用于超大列表的 Web 编程语言?

php - 在 PHP 中让对象随处可用的首选方式是什么?

mysql - 技术上是否可以将递归 CTE 的结果用作括号内的子查询? (在 MySql 中)

MySql 更新并加入另一个表

sql - PostgreSQL、MySQL——冗余更新/插入/删除优化

php mvc 业务逻辑 - 需要建议