0
SELECT *, 
       (SUM(`q6`) / 
       (`q1` * 
           (`q1` + `q2` + `q3` + `q4` + `q5` + `q6`) / 6) 
       * 100) AS percent 
FROM table 
WHERE field2 = 'xxx'
ORDER BY `percent` ASC

上面的代码返回了“百分比”的正确值,但只返回一行。我需要它来返回所有行,其中 15 行。

在我的等式中,我试图获得每行的值“百分比”和最高百分比的 ORDER。

看来,只要我将 加入sum()我的选择语句,它就会只返回一行。

4

2 回答 2

1

在 MySQL 中,您可以在select中包含未聚合的列,而不是在group by. 因为您的查询具有聚合函数,MySQL 将其识别为聚合查询,并且只返回一行。

实际上,您需要为每一行的计算引入总值。这是在select语句中使用子查询的一种方法:

SELECT *,
       (select sum(q6) as sumq6 from table where field2 = 'xxx') / (`q1` * (`q1` + `q2` + `q3` + `q4` + `q5` + `q6`) / 6) 
* 100) AS percent
FROM table
WHERE field2 = 'xxx'
ORDER BY `percent` ASC;

这是另一种方式,使用cross join

SELECT *,
      (sumq6 / (`q1` * (`q1` + `q2` + `q3` + `q4` + `q5` + `q6`) / 6) 
FROM table cross join
     (select sum(q6) as sumq6 from table where field2 = 'xxx') as const
WHERE field2 = 'xxx'
ORDER BY `percent` ASC;
于 2013-07-23T16:10:05.207 回答
1

假设所有评论,你应该得到类似的东西:

SELECT 
  *, (SUM(`q6`) / (`q1` * (`q1` + `q2` + `q3` + `q4` + `q5` + `q6`) / 6) * 100) 
  AS percent 
FROM table 
WHERE field2 = 'xxx' 
GROUP BY id ORDER BY `percent` DESC
于 2013-07-23T16:11:20.500 回答