有没有办法将子查询按字段分组?我正在try 让以下内容发挥作用;该表是RetroSheet MLB比赛日志(log),我正在获取按主队分组的H/HR/RBI等统计数据(此查询按西雅图水手队为客队的比赛进行过滤)

子查询值给出了胜负的完整列表,有没有办法将它们按主队分组?

-- mariners batting avg at away parks

SELECT 
    count(entry_id) G,
    (SELECT 
            COUNT(home_team)
        FROM
            GAME_LOG_ENTRY
        WHERE
            home_team_score > visitor_team_score
                AND game_date > '2017-01-01'
                AND home_team = 'SEA') W,
    (SELECT 
            COUNT(home_team)
        FROM
            GAME_LOG_ENTRY
        WHERE
            home_team_score < visitor_team_score
                AND game_date > '2017-01-01'
                AND home_team = 'SEA') L,
        
    SUM(visitor_at_bats) AB,
    SUM(visitor_hits) H,
    ROUND((SUM(visitor_hits) / SUM(visitor_at_bats)),
            3) AVG,
    SUM(visitor_home_runs) HR,
    SUM(visitor_doubles) doubles,
    SUM(visitor_triples) triples,
    SUM(visitor_rbi) rbi,
    SUM(visitor_so) SO,
    SUM(visitor_bb) BB,
    SUM(visitor_lob) LOB,
    home_team
FROM
    GAME_LOG_ENTRY
WHERE
    visit_team = 'SEA'
        AND home_league = 'AL'
        AND game_date > '2017-01-01'
GROUP BY home_team, W, L
ORDER BY W desc

跟进

我能够执行如下查询:

select game_date,
(home_team_score < visitor_team_score) 'W/L'
FROM GAME_LOG_ENTRY

并获得正确的输出 ‘2022-04-07 00:00:00’,‘1’ ‘2022-04-07 00:00:00’,‘0’

等等,但我无法在主场得分大于客场得分的情况下获得计数.当我试着这样做的时候,我得到了比赛的总数.

推荐答案

您面临的问题与如何使用子查询来计算W和L有关.子查询没有正确分组,这就是为什么您得到的是游戏总数,而不是W和L.

SELECT 
home_team,
COUNT(entry_id) AS G,
SUM(CASE WHEN home_team_score > visitor_team_score THEN 1 ELSE 0 END) AS W,
SUM(CASE WHEN home_team_score < visitor_team_score THEN 1 ELSE 0 END) AS L,
SUM(visitor_at_bats) AS AB,
SUM(visitor_hits) AS H,
ROUND(SUM(visitor_hits) / SUM(visitor_at_bats), 3) AS AVG,
SUM(visitor_home_runs) AS HR,
SUM(visitor_doubles) AS doubles,
SUM(visitor_triples) AS triples,
SUM(visitor_rbi) AS rbi,
SUM(visitor_so) AS SO,
SUM(visitor_bb) AS BB,
SUM(visitor_lob) AS LOB
FROM GAME_LOG_ENTRY
WHERE visit_team = 'SEA' AND home_league = 'AL' AND game_date > '2017-01-01'
GROUP BY home_team
ORDER BY W DESC;

Mysql相关问答推荐

计算符合字段值只能包含一种事件类型这一事实的记录

没有 ORDER BY 的查询性能很高,有 ORDER BY 的查询速度慢得像爬行一样

是否可以使用 IN 或 NOT IN 从没有关联其他表中任何行的表中返回这些名称?

获取 TEXT 类型行的百分比

MySql部分匹配基于部分查询代码

由于长时间操作而断开连接后,我的 sql 查询是否继续执行?

插入重复键查询以在每一行上进行自定义更新

如何使用 sequelize 将复合主键放在连接表中?

MySQL - 计算行重复的最大计数

计算每个用户在第二个表中有多少条记录

如何过滤表格,以便它显示最新的数据?

什么是 PyMySQL,它与 MySQLdb 有何不同?它会影响 Django 部署吗?

自动登录 phpMyAdmin

docker-entrypoint-initdb 中的 MySQL 脚本未执行

MySQL:按字段排序,将空单元格放在末尾

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

从 MySQL 中的日、月、年字段创建日期

MySQL在哪里存储数据库文件?

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'

MySQL CREATE TABLE 语句中的 PRIMARY KEY 定义