MYSQL:除最高和最低之外的总值再乘以

时间:2016-03-16 15:02:24

标签: php mysql sql mariadb

我偶然发现了一个我无法理解的问题。

我有以下主题相关表格:

潜水(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之间的语言组合是一种更好的前进方式?)

2 个答案:

答案 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中将这些分数加在一起以获得每个名称。