我偶然发现了一个我无法理解的问题。
我有以下主题相关表格:
潜水(ID,类型,Diver_id,难度,Contest_id)
结果(ID,积分,Judge_Id,Dive_id)
潜水员(ID,姓名,国家或地区)
我的SELECT语句用于列出diver.Name,diver.Country和"总分"
总分应该是(总+ =((dive_total -min -max)*难度))
让我们说潜水员做了3次潜水。每次潜水都由~4名评委评定,每次潜水都有自己的困难。应该删除每次潜水的最低/最高分数。然后加在一起,乘以难度,然后加到人的总分上。
我有一个显示diver.Name,diver.Country和Total的列表。 但总数只是没有减法和乘法的实际总数。
查询:
SELECT
divers.Name,
divers.Country,
SUM(results.Points) AS Total
FROM results
INNER JOIN dive
ON results.Dive_id = dive.ID
INNER JOIN divers
ON dive.Diver_id = divers.ID
WHERE dive.Contest_id = '1'
GROUP BY divers.Name
ORDER BY Total DESC
不要介意contest_id。它始终是' 1'
如有需要,请询问更多信息。也许这个问题非常愚蠢。我不是一个先进的数据库家伙"。对不起,提前说错了。
(后来用php / html打印。也许mysql和php之间的语言组合是一种更好的前进方式?)
答案 0 :(得分:1)
我认为你想要的是这个
SELECT
divers.Name,
divers.Country,
((SUM(results.Points) - MAX(results.Points) - MIN(results.Points)) * dive.Difficulty) AS Total
FROM results
INNER JOIN dive
ON results.Dive_id = dive.ID
INNER JOIN divers
ON dive.Diver_id = divers.ID
WHERE dive.Contest_id = '1'
GROUP BY divers.Name
ORDER BY Total DESC
否则我只想更改SELECT以包含:
MIN(results.Points) as maxPoints,
MAX(results.Points) as minPoints,
SUM(results.Points) as totalPoints
然后使用PHP
进行数学方面的操作答案 1 :(得分:0)
谢谢ode2k!很有帮助。您的代码+某些GROUP BY
的最终结果 SELECT
divers.Name,
divers.Country,
SUM(results.Points * dive.Difficulty) - MAX(results.Points * dive.Difficulty) - MIN(results.Points * dive.Difficulty) AS Total
FROM results
INNER JOIN dive
ON results.Dive_id = dive.ID
INNER JOIN divers
ON dive.Diver_id = divers.ID
WHERE dive.Contest_id = '1'
GROUP BY divers.Name,
dive.ID,
dive.Difficulty,
results.Dive_id
ORDER BY Total DESC
然后我在PHP中将这些分数加在一起以获得每个名称。