SELECT *,sum()与方程只返回一行

时间:2013-07-23 16:05:26

标签: mysql sql

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()添加到我的select语句中,它就会返回一行。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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