-3
 Master Table
nID  Elementtype elementval 
1    volume         5          
1    rating         +          
1    volume         3          
1    rating         -          
2    volume         2          
2    rating         *            
2    volume         4         
2    rating         +          
3    volume         3          
3    rating         + 

client      table
  nID       client   
   1        halkins    
   2        narnia
   3        avatar
   4        narnia   
   5        newsco
   6        halkins 

たとえばハルキンの場合、クライアントごとに3つのタイプのボリュームの平均と評価の合計を取得するにはどうすればよいですか?

client     No(sum)       volumeavg      ngve   potve    neutral
 halkins    4                 4          1       1         0

基本的に同じクエリで他の値を取得する方法、または他のアプローチです。ボリュームはボリュームの平均であり、halkins 5 + 3/2=4の場合

4

1 に答える 1

3

テーブルを結合してから、結果をグループ化する必要があります。

SELECT   client,
         COUNT(*) AS `No(sum)`,
         AVG(IF(Elementtype='volume', elementval, NULL)) AS volumeavg,
         SUM(Elementtype='rating' AND elementval='-') AS ngve,
         SUM(Elementtype='rating' AND elementval='+') AS potve,
         SUM(Elementtype='rating' AND elementval='*') AS neutral
FROM     Master JOIN client USING (nID)
GROUP BY nID

sqlfiddleでそれを参照してください。

于 2012-08-30T13:07:19.500 に答える