1

私は初めて SQL を学んでおり、これらのクエリを実行するように指示されました。

問題を解決するためにこれらのステートメントを書きましたが、それらは機能しますが、使用しませんgroup by

誰かがこれを変更する方法を提案できますか? 彼らはgroup byおそらく andのみを使用する必要whereがあります。この割り当ては、より高度なものを使用することになっているとは思いません。

大統領の最新の生年月日は? (最年少社長)

SELECT birth, first_name, last_name 
FROM sampdb.president 
WHERE birth= (select MAX(birth) FROM sampdb.president);
+------------+------------+-----------+ 
| birth      | first_name | last_name |
+------------+------------+-----------+ 
| 1946-08-19 | William J. | Clinton   |
+------------+------------+-----------+ 
1 row in set (0.00 sec)

SELECT birth, first_name, last_name 
FROM sampdb.president 
WHERE birth>=ALL(SELECT MAX(birth) FROM sampdb.president);  
+------------+------------+-----------+
| birth      | first_name | last_name |
+------------+------------+-----------+
| 1946-08-19 | William J. | Clinton   |
+------------+------------+-----------+
1 row in set (0.00 sec)

最古の?(最年長社長)

SELECT birth, first_name, last_name 
FROM sampdb.president 
WHERE birth=(SELECT MIN(birth) FROM sampdb.president);
+------------+------------+------------+
| birth      | first_name | last_name  |
+------------+------------+------------+
| 1732-02-22 | George     | Washington |
+------------+------------+------------+
1 row in set (0.00 sec)
4

2 に答える 2

3

あなたの場合、グループ化使用されていますが、それは暗黙的です。不在GROUP BYは であることが暗示されていますGROUP BY ()。したがって、明示的な GROUP BY 句を使用する必要がある場合は、サブクエリで指定できます。

SELECT birth, first_name, last_name 
FROM sampdb.president 
WHERE birth = (SELECT MAX(birth) FROM sampdb.president GROUP BY ());

ただし、すべての SQL 製品が明示的な をサポートしているわけではなく、サポートしGROUP BY ()ている場合でも、実装されている動作が暗黙的なものとは多少異なる場合がありますGROUP BY ()GROUP BY ()特に、ソース データセットが空の場合、明示的および暗黙的に異なる出力が生成される場合があります。たとえば、samdb.presidentテーブルが空の場合、これは

SELECT MAX(birth) FROM sampdb.president GROUP BY ()

そのような SQL 製品では行がありません。対照的に、このクエリは、単一の列に NULL を含む単一の行を生成します。

SELECT MAX(birth) FROM sampdb.president

いくつか例を挙げると、 OracleSQL Serverには、この違いがあることが知られています。

ただし、GROUP BY クエリを (スカラー) サブクエリとして使用しているように見えるため、クエリの最終出力は、テーブルが空GROUP BYであるかどうかに関係なく、暗黙的および明示的の両方で同じになります。使用している SQL 製品の場合、出力に影響を与えることを心配することなく、サブクエリに明示的に追加できます。presidentGROUP BY ()

于 2013-07-21T12:05:33.343 に答える
2

プラットフォームに応じて、さまざまな方法でこれを行うことができます。

Oracleでは、次のようなことができます:

SELECT *
FROM (SELECT birth, first_name, last_name 
      FROM sampdb.president
      ORDER BY birth)
WHERE rownum = 1

SQLサーバーでは、次のようなことができます:

SELECT TOP 1 birth, first_name, last_name 
FROM sampdb.president
ORDER BY birth

MySQL では、次のようなことができます。

SELECT birth, first_name, last_name 
FROM sampdb.president
ORDER BY birth
LIMIT 1;
于 2013-07-21T03:22:07.410 に答える