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

上記のコードは、「パーセント」の正しい値を返していますが、1 行しか返しません。15行のすべての行を返す必要があります。

私の方程式では、各行の値「パーセント」を取得し、最高パーセントで並べ替えようとしています。

をselectステートメントに追加するとすぐに、sum()1行しか返されないようです。

4

2 に答える 2

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 に答える
1

MySQL では、select集計されておらず、 にもない列を に含めることができますgroup by。クエリには集計関数があるため、MySQL はそれを集計クエリとして認識し、1 行のみを返します。

実際には、各行の計算の合計値を取り込む必要があります。selectステートメントでサブクエリを使用する 1 つの方法を次に示します。

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 に答える