MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで、各グループの上位2行を選択するにはどうすればよいですか?


各グループから上位2行を選択するには、サブクエリでwhere条件を使用します。テーブルを作成しましょう。テーブルを作成するためのクエリは次のとおりです。

mysql> create table selectTop2FromEachGroup
   -> (
   -> Name varchar(20),
   -> TotalScores int
   -> );
Query OK, 0 rows affected (0.80 sec)

次に、insertコマンドを使用してテーブルにいくつかのレコードを挿入します。クエリは次のとおりです。

mysql> insert into selectTop2FromEachGroup values('John',32);
Query OK, 1 row affected (0.38 sec)
mysql> insert into selectTop2FromEachGroup values('John',33);
Query OK, 1 row affected (0.21 sec)
mysql> insert into selectTop2FromEachGroup values('John',34);
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectTop2FromEachGroup values('Carol',35);
Query OK, 1 row affected (0.17 sec)
mysql> insert into selectTop2FromEachGroup values('Carol',36);
Query OK, 1 row affected (0.14 sec)
mysql> insert into selectTop2FromEachGroup values('Carol',37);
Query OK, 1 row affected (0.15 sec)
>

selectステートメントを使用して、テーブルのすべてのレコードを表示します。クエリは次のとおりです。

mysql> select *from selectTop2FromEachGroup;

出力は次のとおりです。

+-------+-------------+
| Name  | TotalScores |
+-------+-------------+
| John  |          32 |
| John  |          33 |
| John  |          34 |
| Carol |          35 |
| Carol |          36 |
| Carol |          37 |
+-------+-------------+
6 rows in set (0.00 sec)

where条件とサブクエリを使用して各グループから上位2行を選択するクエリは次のとおりです。

mysql> select *from selectTop2FromEachGroup tbl
   -> where
   -> (
   ->    SELECT COUNT(*)
   ->    FROM selectTop2FromEachGroup tbl1
   ->    WHERE tbl1.Name = tbl.Name AND
   ->    tbl1.TotalScores >= tbl.TotalScores
   -> ) <= 2 ;

出力は次のとおりです。

+-------+-------------+
| Name  | TotalScores |
+-------+-------------+
| John  |          33 |
| John  |          34 |
| Carol |          36 |
| Carol |          37 |
+-------+-------------+
4 rows in set (0.06 sec)

  1. MySQLで再帰的なSELECTクエリを実行するにはどうすればよいですか?

    再帰的選択については、例を見てみましょう。まず、テーブルを作成します。 CREATEコマンドを使用してテーブルを作成します。 ); Query OK, 0 rows affected (0.61 sec) 次に、テーブル「tblSelectDemo」にレコードを挿入します。 insert into tblSelectDemo values(5,Bob); Query OK, 1 row affected (0.18 sec) すべてのレコードを表示します。 SELECT *from tblSelectDemo; これが出力です。 +------+-------+ | id

  2. MySQLから最後の10行を選択するにはどうすればよいですか?

    MySQLから最後の10行を選択するには、SELECTステートメントとLimitの概念でサブクエリを使用できます。以下は例です。 テーブルを作成します。 mysql> create table Last10RecordsDemo -> ( -> id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.75 sec) テーブルにレコードを挿入します。 mysql> insert into Last10RecordsDemo values(1,John),(