2016-09-03 4 views
-4

これはうまく動作すると確信しています。GROUP BY句がない場合は、GROUP列(MIN()、MAX()、COUNT()、...)をGROUP列なしで混在させることはできません

SELECT first_name, surname, id, time, MIN(timeinmilliseconds) FROM users WHERE team= '$key

どこか、なぜ私はGROUPBY句を使用することになり、私は知りません。

+0

「慣れた」と定義します。不確定な結果を実行して生成する(このコードはMySQLで文書化されているように)ので、私の考えでは正しいコードではありません(明示的にコードの意図でない限り)。 –

答えて

0

SQL92以前では、選択リストのためのクエリを許可 が条件をHAVING、またはORDER BYリストは がどちらのGROUP BY句で指定されたも 機能(一意に決定に依存している非集約列を参照しません。 by)GROUP BY列。例えば選択リスト内の非凝集名 列がGROUP BYには表示されませんので、 このクエリは、標準のSQL92で違法である:クエリのための

SELECT o.custid, c.name, MAX(o.payment) 
FROM orders AS o, customers AS c 
WHERE o.custid = c.custid 
GROUP BY o.custid; 

に、SQL92に法的なこと名前列は、選択 リストから省略するか、GROUP BY句で指定する必要があります。

SQL99以降では、GROUP BY列に機能的に依存している場合、オプションの機能ごとにそのような非集約を許可します。このような の関係がnameとcustidの間に存在する場合、クエリは合法です。この は、例えば、 の顧客の主キーである場合があります。

MySQL 5.7.5以降では、機能依存の検出が実装されています。 ONLY_FULL_GROUP_BY SQLモードが有効になっている場合(デフォルトでは) 選択リストHAVING条件、または ORDER BYリストが、 GROUP BY句にも名前も付けられていない集約されていない列を参照するクエリも拒否されます。機能的にそれらに依存する。 ( 5.7.5前に、MySQLは機能的依存性を検出していないとONLY_FULL_GROUP_BYはデフォルトでは有効になっていません。 前5.7.5動作の説明については、MySQL 5.6リファレンスマニュアルを参照してください。)

https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

group byがない場合、機能依存の列はありません。おそらくサブクエリがmin(timeinmilliseconds)の値を取得することが必要です。

0

それはSUM、私はそれはあなたが望むものを生成することを知りませんが、それは

0

機能をMIN()、MAX()、COUNT()を実行する必要があり

SELECT first_name, surname, id, time, MIN(timeinmilliseconds) 
FROM users 
WHERE team = '$key' 
GROUP BY id, first_name, surname, time 

を働いたことはありません()、AVG()は、sqlで結果セットをグループ化するために使用される集合関数です。 構文に従って、集約関数を適用しているgroup by句の列について言及する必要があります。

MIN()関数を使用して、選択した列に対して最小時間をミリ秒単位で調べます。したがって、以下のような構文に従ってください。

 SELECT first_name, surname, id, time, MIN(timeinmilliseconds) 
     FROM users 
     WHERE team= '$key' 
     GROUP BY first_name,surname,id,time 

これはあなたの疑問を解決します。