2017-01-17 8 views
1

私はこのクエリをかなりの時間プログラムで使ってきましたが、間違った結果を出すようになってきました。一意のLEVELごとに1つの列名を返し、次にそのレベルで見つかる最低のz_index値を返すことを期待しています。予想される結果であるGROUP BYクエリの最下位カラム値を返すmysql

ProductID level z_index 
============================== 
    1   One  10 
    1   Two  20 
    1   Three  30 

SELECT * FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index 

それはこのような何かを返すために使用しました。しかし、それは今、これを返している:

ProductID level z_index 
============================== 
    1   One  83 
    1   Two  224 
    1   Three  308 

私はまだレベルごとに1つずつ取得するが、それは今、そのレベルのために見つかったz_index値を返しています。

MySqlで何か変わったのですか、または私のクエリが永遠に悪いことがありましたか?

アップデート土曜日1月21日:私はより多くの列に追加したときに今、私はクエリがz_indexのための正しい値が、file_nameにとfile_locに値を返す必要があります。名前は、レベルの最初の行からなるように見えると正しいz_index値を含む行ではありません。

何が起こったのですか?

SELECT ProductID, level, min(z_index), file_name, file_loc FROM Conrad WHERE ProductID = '1' GROUP BY level ORDER BY z_index 

ProductID level z_index file_name file_loc 
==================================================== 
    1   One  10  wrong.png ? 
    1   Two  20  file.png  ? 
    1   Three  30  names.png ? 
+3

あなたのクエリは永遠に悪かったです。それはよく書かれています。 – Strawberry

+0

GROUP BYを使用する場合は、集計関数(http://www.w3schools.com/Sql/sql_functions.asp)をmin(z_index)のように使用してください。 – cSteusloff

+0

また、z_indexのように見えます。 – Strawberry

答えて

0

次試してみてください。

select 
    productid, 
    level, 
    min(z_index) 
from 
    Conrad 
WHERE 
    ProductID = '1' 
GROUP BY 
    level 
ORDER BY z_index 
+0

これは既に提供されている回答とどのように違うのですか? – Strawberry

+0

このクエリは完全に機能します。私は元のクエリがテーブルの自然な順序がずっと前だったことによって幸運に思ったと思う。ありがとう! – user1601513

+0

@ user1601513は、これとは異なる番号ですか? – raphael75

2

クエリは最小値では間違っています。これを試してみてくださいクエリ

SELECT ProductID 
    , level 
    , MIN(z_index) z_index 
    FROM Conrad 
WHERE ProductID = 1 
GROUP 
    BY ProductID 
    , level 
ORDER 
    BY z_index 
+1

あなたは私を見せてください。 – reza

+0

元のポスターはそれについて何も言わなかった。彼はその質問に答えました。その場合はproductidでグループ化する必要があります。 – raphael75

+0

私はここでは必要ないと思った。 – reza