Zasadniczo próbuję obliczyć strzały otrzymane w golfa na różne cztery kulki, oto moje dane: -

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   

Chcę odzyskać powyższe linie z dodatkową kolumną, która ma być obliczona w zależności od wartości w kolumnie Grupy, która jest graczami (Handicap - (najniższy handicap w grupie)) x .75

Mogę go osiągnąć w grupie, ale trzeba agregować wszystko, czy istnieje sposób, w jaki mogę zwrócić wartość jak powyżej?, Oto zapytanie, które zwraca wartość:

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

Przepraszamy za formatowanie naprawdę nie widziałem, jak tutaj dostać mój stół, każda pomoc będzie bardzo doceniana, używam najnowszego MySQL z Ubuntu 18.04

0
mal 21 luty 2019, 13:20

2 odpowiedzi

Najlepsza odpowiedź

Cześć faceci znalazłem rozwiązanie, w zasadzie, muszę upuścić Min natychmiast po rundzie równania, dlatego nie potrzebuje grupy.

WYBIERZ

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

OD

Results 

GDZIE

Results.DatePlayed='2018=11=10 00:00:00' 
0
mal 22 luty 2019, 14:22

Brak odpowiedzi; za długo na komentarz ...

Po pierwsze, chętnie nie wiem nic o golfa, więc co następuje, może nie być optymalna, ale musi przynajmniej być krokiem we właściwym kierunku ...

Znormalizowany schemat może wyglądać na coś takiego ...

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
0
Strawberry 21 luty 2019, 11:56