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语句中,它就会返回一行。
答案 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