現時点では、クエリで最高値を表示するために使用しています:
ORDER BY Height DESC
) T
WHERE RowNum = 1
これは、たとえば 10 などの最大値を表示しますが、2 つのエントリが両方とも同じ値 10 である場合はどうなるでしょうか。
ジョイントの最高値の両方を表示するようにするにはどうすればよいですか?
Oracleで使用、ランク分析を使用
select a, b
from (select a, b, rank() over (order by height desc) rnk
from your_table)
where rnk = 1;
1つの解決策は、CTEを使用することです
CTE の使用
;WITH q AS (
SELECT MAX(Height) AS maxHeight
FROM YourTable
)
SELECT *
FROM YourTable
INNER JOIN q ON q.maxHeight = Yourtable.Height
またはサブセレクトを含む単純な where 句
SELECT *
FROM YourTable
WHERE Height = (SELECT MAX(Height) FROM YourTable)
個人的には、ステートメントが乱雑にならないので、CTE を使用することを好みます (この単純なケースでは正しくありませんが、実際には、サブセレクトよりもはるかに読みやすいことがよくあります)。
ここではサブクエリがありません。より複雑ですが、作成するのは面白かったです。
select ifnull(@d,@d:=actor_id),actor_id,if(@d>actor_id,1,0)as t
from t1 having t=0 order by actor_id desc;
これが私のコンピューターの例です。
mysql> desc t1;
+-------------+----------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+---------------------+-------+
| actor_id | smallint(5) unsigned | NO | | 0 | |
| first_name | varchar(45) | NO | | NULL | |
| last_name | varchar(45) | NO | | NULL | |
| last_update | timestamp | NO | | 0000-00-00 00:00:00 | |
+-------------+----------------------+------+-----+---------------------+-------+
4 rows in set (0.00 sec)
mysql> select * From t1 order by actor_id desc limit 5;
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update |
+----------+------------+-----------+---------------------+
| 20001 | test | test | 2012-12-13 09:12:50 |
| 20001 | test | test | 2012-12-13 09:12:51 |
| 2000 | b | a | 0000-00-00 00:00:00 |
| 2000 | b | a | 0000-00-00 00:00:00 |
| 2000 | b | a | 0000-00-00 00:00:00 |
+----------+------------+-----------+---------------------+
5 rows in set (0.00 sec)
mysql> select ifnull(@d,@d:=actor_id),actor_id,if(@d>actor_id,1,0)as t
-> from t1 having t=0 order by actor_id desc;
+-------------------------+----------+---+
| ifnull(@d,@d:=actor_id) | actor_id | t |
+-------------------------+----------+---+
| 20001 | 20001 | 0 |
| 20001 | 20001 | 0 |
+-------------------------+----------+---+
2 rows in set (0.00 sec)