php - MYSQL:除最高和最低值外的总计值然后相乘

标签 php mysql sql mariadb

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

我有以下主题相关表格:

潜水(ID、类型、Diver_id、难度、Contest_id)

结果(ID、积分、Judge_Id、Dive_id)

潜水员(ID、姓名、国家/地区)

我的 SELECT 语句旨在列出 diver.Name、diver.Country 和“总分”

总分应该是(总分 += ((dive_total -min -max)*difficulty))

假设一名潜水员进行了 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

不要介意competition_id。它始终是“1”。

如有需要,请索取更多信息。也许这个问题很愚蠢。我不是一个高级的“数据库专家”。提前抱歉英语不好。

(稍后在 php/html 中打印。也许 mysql 和 php 之间的语言组合是更好的前进方式?)

最佳答案

我想你想要的是这个

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 进行数学计算

关于php - MYSQL:除最高和最低值外的总计值然后相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36039424/

相关文章:

PHP & MYSQL -- 不要插入相同的数据

javascript - 脚本在实际服务器中不起作用,但在本地主机 XAMPP 中起作用

sql - 如何传递带引号的参数

c++ - 调试/跟踪嵌入式 sql

php - paypal 数字商品集成如何启用访客支付?

php - 如何更新php中最后一行的一个值

php无法从mysql读取带空格的数据

mysql - 读到行尾

php - mysql_real_escape_string 问题

php - 按结果数对 SQL 查询进行排序