2016-08-22 14 views
0

ように私はいくつかのデータを分析するために、CSVでのHadoopを使用しています。私はsql/mysqlを使ってデータを分析しています。SUM(COUNT(列)* AVG(列))の列

私もリモートで関連する何かを見つけることなく、この時間と時間をグーグルで過ごしました。私は、列の数と列の合計または平均のいずれかを取って、それらを互いに乗算するクエリを持つ必要があります。

このdoesntの仕事:

SELECT model, 
     brand, 
     COUNT(model) AS ModelCount, 
     AVG(distance) AS DistanceAvg, 
     // OR SUM(distance) AS DistanceSum 
     // SUM(ModelCount * DistanceAvg) AS Total 
     // SUM(ModelCount * DistanceSum) AS Total 
     // SUM(COUNT(model)*AVG(distance)) AS Total 
     // SUM(COUNT(model)*SUM(distance)) AS Total 
     // None of the commented lines work 
FROM cars 
WHERE type = 'M1' OR type = 'M1G' 
GROUP BY model, brand 
ORDER BY ModelCount DESC; 

コードの残りの部分は、うまく動作しますが、コメントソリューションの作品のどれも。グーグルの時間、運がない。

私が把握するために必要なもの、私は後にしていますどのような理解の問題があるようです、次のように平均化した値で、カウント値を乗算した結果を取得する方法である:私はモデルをカウントしたい

SUM(COUNT(model)*AVG(distance)) AS TOTAL 

それらのどれが存在するかを知るためには、うまく動作します。それから私は、グループと一緒に機能するすべての車からモデルを使って平均距離を計算したいと思っています。そして、私は、これらの特定の車で運転される平均距離で車の数を掛けるために質問をしたい。

私は私が必要とする値を取得し、手動で値を計算することができ、私はちょうどそれがこの規模で行うには膨大な作業であるため、これを計算し、手動でスキップする方法があった望んだと思います。文字通りそのリストには500万台の車があります。私はこれらの条件で手動で作業することはできません。私はこれを必要と

ないこのことができますかどうかわからが、HERESに取り組んクエリは、コメントを追加しました:

mallimerkinta merkkiselvakielinen  suosituinmalli keskilukema 

4D COROLLA 1.6XLI-AE101L-AEMDKW/247  Toyota 4715 267686.0 

5D MONDEO STW 1.8-BWY/275 Ford 6021 226086.0 

5D FOCUS STW 1.6-DNW/262 Ford 10571 216980.0 

5D GOLF VARIANT 1.6-1J/250 Volkswagen 13136 200201.0 

V70 Farmari (AC) 4ov 2400cm3 A Volvo 5912 198062.0 

4D FOCUS HATCHBACK 1.6-DAW/262 Ford 5899 197925.0 

4D BORA SEDAN 1.6-1J/250 Volkswagen 4660 180550.0 

5D COROLLA STW 1.6-ZZE121L-DWMDKW/260 Toyota 4999 180221.0 

5D COROLLA STW 1.6-ZZE121L-DWMNKW/260 Toyota 4990 176687.0 

4D ALMERA SEDAN 1.5-BAAN16/254 Nissan 8421 156514.0 

XC60 Farmari (AC) 4ov 2400cm3 A  Volvo 7900 113591.0 

GOLF Farmari (AC) 4ov 1390cm3 Volkswagen 6215 87724.0 

FOCUS Farmari (AC) 4ov 1596cm3 Ford 5063 86598.0 

GOLF Farmari (AC) 4ov 1390cm3 A  Volkswagen 5634 83164.0 

CEED Monik�ytt�ajoneuvo (AF) 4ov 1591cm3 Kia  5191 78059.0 

TOYOTA AVENSIS Monik�ytt�ajoneuvo (AF) 4ov 1798cm3 Toyota 6384 68166.0 

NISSAN QASHQAI Monik�ytt�ajoneuvo (AF) 4ov 1598cm3 Nissan 10595 59330.0 

FIESTA Viistoper� (AB) 4ov 1242cm3 Ford 5631 58837.0 

TOYOTA AURIS Monik�ytt�ajoneuvo (AF) 4ov 1798cm3 Toyota 5558 56878.0 

TOYOTA YARIS Monik�ytt�ajoneuvo (AF) 4ov 1329cm3 Toyota 11829 40348.0 

私はsuosituinmalliとしてkeskilukemaを掛け必要があります。ここでは

SELECT mallimerkinta, 
     merkkiSelvakielinen, 
     COUNT(mallimerkinta) AS Suosituinmalli, 
     ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema 
FROM ajoneuvot 
WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G' 
GROUP BY mallimerkinta, merkkiSelvakielinen 
HAVING COUNT(mallimerkinta) > '4659' 
ORDER BY Keskilukema DESC; 

は、それが生成する結果があります追加の列。

+0

以前に、あなたのコメント行は動作しません理由で同じクエリで定義されたエイリアスを使用することはできません。エイリアスの代わりに実際の計算を使用すれば正常に動作します。 –

+0

私はあなたのスクリプトの意味を理解していませんが、明確なサンプルデータと明確なサンプル結果を与えてください。 –

+0

VKPは、コメントセクションでは、オプションとしてactualy計算を含まないか、そして、私はあなたが何を意味するか見当がつかない。 – JoniTL

答えて

0
SELECT mallimerkinta, 
     merkkiSelvakielinen, 
     COUNT(mallimerkinta) AS Suosituinmalli, 
     ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema, 
     COUNT(mallimerkinta) * ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS DesiredColumn 
FROM ajoneuvot 
WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G' 
GROUP BY mallimerkinta, merkkiSelvakielinen 
HAVING COUNT(mallimerkinta) > '4659' 
ORDER BY Keskilukema DESC; 

はそうのようなもを行うことができます。

SELECT 
    t.* 
    ,t.Suosituinmalli * t.Keskilukema AS DesiredColumn 
FROM 
    (
     SELECT mallimerkinta, 
      merkkiSelvakielinen, 
      COUNT(mallimerkinta) AS Suosituinmalli, 
      ROUND(AVG(CAST(matkamittarilukema AS FLOAT)),0) AS Keskilukema, 
     FROM ajoneuvot 
     WHERE ajoneuvoluokka = 'M1' OR ajoneuvoluokka = 'M1G' 
     GROUP BY mallimerkinta, merkkiSelvakielinen 
     HAVING COUNT(mallimerkinta) > '4659' 
    ) t 
ORDER BY Keskilukema DESC; 

他の人は彼らのコメントで言っているあなたは、他の動的な列の定義に列の別名を使用することはできませんということです。したがって、上記のあなたの例では、SUM(ModelCount * DistanceAvg)を述べたが、彼らはしかし、あなたが(COUNT(MODEL) * AVG(DISTANCE))を行っている可能性のように参照することはできませんのでModelCountDistanceAvgは同じselect文に対する列の別名です。したがって、問題を修正する2つの方法があります。最初の例のように、新しい列の定義で参照する列の定義を繰り返します。または、2番目の方法は、選択したステートメントをサブ選択に変えたことです。外側の選択は、列のエイリアスを理解し、新しい動的な列の定義にそれらを使用できるようにします。

+0

これは動作しています、ありがとうございました! – JoniTL

+0

答えがあなたを助けてくれてうれしいです。私の答えを受け入れてください。質問は解決されておらず、それ以上の作業は必要ありません。ここでどのように/いつ行うかに関する記事があります。ありがとう、歓迎されてstackoverflow http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt