MYSQL我试图返回一个值,当我与另一个字段分组时,我需要将一个值与同一字段的最小值进行比较

时间:2019-02-21 10:20:29

标签: mysql

基本上,我正在尝试计算高尔夫在四个不同球上的击球次数,这是我的数据:-

DatePlayed  PlayerID    HCap    Groups  Hole01  Hole02  Hole03  Shots

2018-11-10  001          15       2       7        3    6   
2018-11-10  004          20       1       7        4    6   
2018-11-10  025          20       2       7        4    5   
2018-11-10  047          17       1       8        3    6   
2018-11-10  048          20       2       8        4    6   
2018-11-10  056          17       1       6        3    5   
2018-11-10  087          18       1       7        3    5   

我想用另外一列来检索以上各行,具体取决于组列值,即玩家(让分-(组中最低的让分))x .75

我可以通过分组实现它,但是需要汇总所有内容,有没有办法像上面那样返回值?这是返回值的查询:

SELECT 
    PlayerID, 
    MIN(Handicap),
    MIN(Hole01) AS Hole01,
    MIN(Hole02) AS Hole02,
    MIN(Hole03) AS Hole03,
    MIN(CourseID) AS CourseID, 
    Groups,
    ROUND(
        MIN((Handicap - 
            (SELECT MIN(Handicap) FROM Results AS t 
            WHERE DatePlayed='2018-11-10 00:00:00' AND t.Groups=Results.Groups)) *.75)) 
        AS Shots
FROM 
    Results 
WHERE 
    Results.DatePlayed='2018=11=10 00:00:00' 
GROUP BY 
    DatePlayed, Groups, PlayerID

  PlayerID MIN(Handicap)Hole01 Hole02 Hole03 CourseID Groups Shots

     4         20         7       4     6       1        1    2

     47        17         8       3     6       1        1    0

     56        17         6       3     5       1        1    0

     87        18         7       3     5       1        1    1 

      1        15         7       3     6       1        2    0

     25        20         7       4     5       1        2    4

     48        20         8       4     6       1        2    4

对不起,任何格式真的看不到如何在这里获取表格,我们将不胜感激,我使用的是来自ubuntu 18.04的最新mysql

2 个答案:

答案 0 :(得分:0)

不是答案;评论太久了...

首先,我对高尔夫球一无所知,因此接下来的事情可能不是最佳选择,但至少必须朝着正确的方向迈进。

标准化的架构可能看起来像这样...

rounds
round_id DatePlayed  PlayerID HCap Groups  
       1 2018-11-10         1   15      2
       2 2018-11-10         4   20      1       

round_detail 
round_id hole shots
       1    1     7 
       1    2     3
       1    3     6
       2    1     7
       2    2     4
       2    3     6

答案 1 :(得分:0)

大家好,我已经找到了解决方案,基本上我需要在等式的ROUND之后立即删除MIN,因此不需要Group By。

  

选择

PlayerID,

Handicap,

Hole01,

Hole02,

Hole03,

CourseID, 

Groups,

ROUND((Handicap - 

      (SELECT MIN(Handicap) FROM Results AS t 

       WHERE DatePlayed='2018-11-10 00:00:00'

       AND t.Groups=Results.Groups)) 

       *.75) AS Shots
     

Results 
     

位置

Results.DatePlayed='2018=11=10 00:00:00'