2012-05-03 12 views
0

このコードを使用して合計投票を検索しようとしていますが、私には12の基準があります。 したがって、SHOP_IDごとにTOTALを合計し、12で割る(合計するために使用された列の数)。 COUNT(shop_id)は店舗の数を見つけます。たとえば、2つのshop_id入力が1つあり、合計が0(12の項目が0)で、もう1つが合計で60が12の基準で除算され、shop_idカウント2 (60/12)/ 2 = 2.5 私は結果を5にしたいと思います。SQL、0の値を数えない方法

$sel = mysql_query("SELECT SUM(comfort + service + ambience + mood + spacious + 

    experience + cleanliness+ price + drinks + food + music + toilets)/(12/COUNT(shop_id) as total     
    FROM ratings   
    WHERE shop_id = $shop_id");     

if(mysql_num_rows($sel) > 0){ 
    while($data = mysql_fetch_assoc($sel)){ 
     $total = $total + $data['total']; 
     $rows++; 
    } 
    $perc = ($total/$rows); 
    return round($perc,2); 
} else { 
    return '0'; 
} 

イメージを供給すれば、達成しようとしているイメージが視覚的に表示されますか?

各行は1票ではなく、各shop_idは12票です。 各列のカテゴリ名:comfort + service + ambienceは列IDで、そのフィールドへのエントリは1票、12票1票、1票に投票すると0票、0票、 2で除算すると正解の半分になります。

視覚的な例をアップロードし、評価のために評価欄を12から7に短縮しました。 table example

+0

何 'COUNT(*)を'使用について。 – Niranjan

答えて

0

HAVING句を使用してみてください:

select 
... 
from 
... 
where 
... 
having COUNT(shop_id) > 0 
+0

ありがとうございますが、成功はありません。私はここから始めるには何か間違ったことをしていると思います – Renai

0
SELECT SUM(comfort + service + ambience + mood + spacious + 
experience + cleanliness+ price + drinks + food + music + toilets)/(12/COUNT(shop_id) as total     
FROM ratings   
WHERE shop_id = $shop_id 
HAVING total > 0 

私はあなたのクエリは非常に適切ではありませんが、それはタイプミスかもしれないかなり確信しています。ここで

が良いのクエリのようになります。個人的に

SELECT shop_id, SUM(comfort + service + ambience + mood + spacious + 
experience + cleanliness+ price + drinks + food + music + toilets)/12 as total_rating     
FROM ratings   
GROUP BY shop_id 
HAVING total > 0 

、誰かが軒並み0を取得している場合、私はそれは注目に値します、と思うが、上記のあなたの店あたりの平均評価を与えると、いずれかを除外する必要があります

各カテゴリが0〜5のスケールであり、12のカテゴリがある場合、そのパーセントスコアは(個々のスコアの合計)/(可能な合計)* 100であることを意味しますこの場合、個々の得点/ .6の合計(同じように動作します)。星の数が各カテゴリの最高得点と等しい「星の評価」が必要な場合は、それはちょうど平均です。その場合、私は小数点第一位を四捨五入します。あなたはそのルートを移動したい場合は、ここでは、クエリであるので、私が使用します。

SELECT shop_id, 
      Ceiling(
       Sum(comfort + service + ambience + mood + spacious + 
         experience + cleanliness + price + 
         drinks + food + music + toilets 
      ) /. 6) 
      AS percent_rating, 
      ROUND(
      SUM(
       comfort + service + ambience + mood + 
       spacious + experience + cleanliness + 
       price + drinks + food + music + toilets 
      )/12, 1) 
      as star_rating 
    FROM ratings 
    GROUP BY shop_id 

を今、あなたはそれがレイアウトしたい場合は、それぞれのスコアが100%の外にある場合、それは次のようになり(cat_score/5)* 100または(cat_score/.05)。私は、フィールドごとに数学を明示的に行う必要なしに、すべてのカテゴリに適用する簡単な方法があるかどうかはわかりませんが、実際には、4/5は80%である。

デフォルト0と意図的0の関係については、違いを知る方法がありません。誰かが0(または空白)からそれを変更するのに十分な移動を感じていない場合、それはそれほど素晴らしいものであってはなりません。あなたがそれを空白のままにするというオプションを与えている場合(0ではない、それは0ではありません)それはNULLです)、あなたはそれを3に移動することができます(それは同じことをします。彼らがすべて空白を残した場合、それは「平均して私はそれを記入しませんでした」と同じです)それを投げることはmysqlの痛みであり、統計的には誤解を招くデータにつながります(言語障壁と結合したチャドを吊るして空白にしていると思います)。最終的には、空白を中央に移動すると、普通の平均に頼るのではなく、標準偏差やその他のより価値のある統計を得るために十分なデータが必要となるため、データが十分にあるはずです(ただし、曲線全体をオフにする)。

+0

オタクはどこですか? – Renai

+0

'/(12/COUNT(shop_id)'最後の括弧で囲まれた印がないか、最後に欠けている印が必要ないのですか? – Anthony

+0

最終的には、私はTOTAL/12を2/2.5で割ったものです。 しかし、何か他のことが間違っていることを理解し始めています – Renai

0

は、クエリの最後に追加します。

HAVING comfort + service + ambience + mood + spacious + experience + cleanliness+ price + drinks + food + music + toilets != 0 
+0

ありがとうございます。 mysql_num_rows():指定された引数が有効なMySQL結果リソースではありません – Renai

+0

クエリが失敗し、falseを返す場合は、mysql_error()を使用して何がうまくいかないかを確認します。 – Ing

0

あなたのクエリは非常に適切ではありません。かっこがありません。正しいもの

$sel = mysql_query("SELECT SUM(comfort + service + ambience + mood + spacious + 
experience + cleanliness+ price + drinks + food + music +toilets)/(12/COUNT(shop_id)) 
as total FROM ratings WHERE shop_id = $shop_id having COUNT(shop_id) > 0"); 
+0

ありがとう、しかし私は物事の外見で私のクエリより多くの間違っている – Renai

関連する問題