Muszę ustawić typ danych na pole, ale nie mogę tego zrobić:
SELECT fname,lname,tname,games,
IFNULL((ib+iib+iiib+hr),0) AS h int (6), [does"t work]
IFNULL((a+b+c)),0.000) AS ops decimal (6,3) [does"t work]
FROM players,stats,teams
WHERE players.playerID = stats.sid AND players.club=teams.tid
ORDER BY obp DESC
Odpowiedzi:
1 dla odpowiedzi № 1Rzuć wartość wcześniej:
SELECT fname, lname, tname, games,
CAST(COALESCE(ib+iib+iiib+hr, 0) as signed) AS h,
CAST(COALESCE(a+b+c, 0.000) as decimal(6, 3)) AS ops
FROM players p JOIN
stats s
ON p.playerID = s.sid JOIN
teams t
ON p.club = t.tid
ORDER BY obp DESC;
Nie sądzę, aby parametry długości dla liczb całkowitych były dozwolone w cast()
/convert()
.
Uwagi:
- Nigdy używaj przecinków w
FROM
klauzula. Zawsze użyj wyraźnegoJOIN
składnia. - Użyj aliasów tabel i kwalifikowanych nazw kolumn, zawsze gdy twoje zapytanie odnosi się do więcej niż jednej tabeli.
- wolę
COALESCE()
doIFNULL()
boCOALESCE()
to standardowy SQL. - Jestem bardzo podejrzliwy wobec tego warunku dołączenia:
p.playerID = s.sid
.
0 dla odpowiedzi nr 2
Cześć, to tylko proste połączenie MySQL do administrowania statystykami baseballowymi moich kolegów z drużyny.
SELECT fname,lname,tname,games,
CAST(coalesce(ib+iib+iiib+hr,0) as signed) AS h,r,
CAST(coalesce(ib+iib+iiib+hr+so+fc+o,0) as signed) AS
ab1,iib,iiib,hr,rbi,bb,
CAST(coalesce((ib*1)+(iib*2)+(iiib*3)+(hr*4),0) as signed) AS tb1,so,sb,
CAST(coalesce(((ib+iib+iiib+hr)+bb+hp)/(((ib+iib+iiib+hr)+so+fc+o)+bb+sf+hp)
,0.000) as decimal(6,3)) AS obp,
CAST(coalesce(((ib*1)+(iib*2)+(iiib*3)+
(hr*4))/((ib+iib+iiib+hr)+so+fc+o),0.000) as decimal(6,3)) AS slg,
CAST(coalesce((ib+iib+iiib+hr)/(((ib+iib+iiib+hr)+so+fc+o)),0.000) as
decimal(6,3)) AS avg,
CAST(coalesce((((ib+iib+iiib+hr)+bb+hp)/(((ib+iib+iiib+hr)+so+fc+o)
+bb+sf+hp))+(((ib*1)+(iib*2)+(iiib*3)+
(hr*4))/((ib+iib+iiib+hr)+so+fc+o)),0.000) as decimal(6,3)) AS ops
FROM players p JOIN
stats s
ON p.playerID = s.sid JOIN
teams t
ON p.club=t.tid
ORDER BY obp DESC
Idealnie dokładnie to, czego szukałem!
0 dla odpowiedzi № 3
Możesz użyć funkcji COALESCE to MySQL.
Przykład:
SELECT COALESCE(null, 0)
Twoje zapytanie (zakładając, że nazwa kolumny może mieć prawidłowe wartości, aby nie rzutować żadnego typu danych), może wyglądać jak poniżej.
SELECT COALESCE ((ib+iib+iiib+hr),0) AS h, COALESCE ((a+b+c),0.000) AS ops
FROM players,stats,teams WHERE players.playerID = stats.sid
AND players.club=teams.tid ORDER BY obp DESC;
Po prostu spróbuj tego, w przypadku braku danych Właśnie dostarczyłem przykładowe zapytanie.