[SQL] 타이 T-SQL에 대한 MySQL의 대안
SQL타이 T-SQL에 대한 MySQL의 대안
나는 정상의 N 기록을 취득하는 테이블이 있습니다. 기록은 값으로 정렬 및 일부 레코드는 같은 값을 가지고있다. 내가 여기서 뭘하고 싶은 것은 묶여 포함한 상위 N 기록의 목록을 얻을 수 있습니다. 이 표에 무엇이다 :
+-------+--------+
| Name | Value |
+-------+--------+
| A | 10 |
| B | 30 |
| C | 40 |
| D | 40 |
| E | 20 |
| F | 50 |
+-------+--------+
지금은과 같이 상위 3을 얻으려면
SELECT * FROM table ORDER BY Value DESC LIMIT 3
나는이 얻을 :
+-------+--------+
| Name | Value |
+-------+--------+
| F | 50 |
| C | 40 |
| D | 40 |
+-------+--------+
내가 좀하고 싶습니다 것은 이것이다
+-------+--------+
| Name | Value |
+-------+--------+
| F | 50 |
| C | 40 |
| D | 40 |
| B | 30 |
+-------+--------+
나는 각 레코드의 순위를 계산 내가 정말 좋아하는 첫 번째 N 대신 기록 값으로 주문한 최초의 N의 기록을 위 얻을 수 있습니다 것이 무엇 때문에. 이것은 내가 순위를 계산하는 방법이다 :
SELECT Value AS Val, (SELECT COUNT(DISTINCT(Value))+1 FROM table WHERE Value > Val) as Rank
T-SQL에서 이런 일이 작업을 수행하여 달성 할 수있다 :
SELECT TOP 3 FROM table ORDER BY Value WITH TIES
사람이 어떻게 MySQL의에서이 작업을 수행하는 생각이 있습니까? 나는 그것이 하위 쿼리 또는 임시 테이블에 함께 할 수도 있지만이 작업을 수행 할 수있는 충분한 지식이없는 이해합니다. 나는 임시 테이블을 사용하지 않고 솔루션을 선호하는 것입니다.
해결법
-
==============================
1.당신이 작동합니까?
당신이 작동합니까?
select Name, Value from table where Value in ( select distinct Value from table order by Value desc limit 3 ) order by Value desc
아니면 :
select a.Name, a.Value from table a join (select distinct Value from table order by Value desc limit 3) b on a.Value = b.Value
-
==============================
2.
select a.Name, a.Value from table a join (select Value from table order by Value desc limit 3) b on a.Value = b.Value
이 Fosco의 대답 @ 비슷하지만 서브 쿼리에없는 DISTINCT. 그의 버전 수익률 상위 N 점수가 아닌 최고 N 플레이어 (플러스 관계) 가진 선수. 예를 들면 점수 인 경우 50, 50, 50, 40, 40, 30, 20, 그는 6 플레이어 (3 × 50, × 40, 1X30)을 반환합니다,하지만 당신은 아마도 단지 × 50을합니다.
-
==============================
3.MySQL의 8을 시작으로, 당신은 RANK에 필터링하여, 넥타이 의미론을 에뮬레이트하는 윈도우 기능을 사용할 수 있습니다 (). 예를 들면 :
MySQL의 8을 시작으로, 당신은 RANK에 필터링하여, 넥타이 의미론을 에뮬레이트하는 윈도우 기능을 사용할 수 있습니다 (). 예를 들면 :
SELECT Name, Value FROM ( SELECT Name, Value, RANK() OVER (ORDER BY Value DESC) AS rk FROM table ) t WHERE rk <= 3
더 밀접하게 질문을 읽을 때, 이것은 당신이 원하는 것 정확히하지 않지만,이 T-SQL은 TOP을 통해 N TIES 절 함께 할 수 정확히 않습니다.
from https://stackoverflow.com/questions/3469107/mysqls-alternative-to-t-sqls-with-ties by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 그것은 (SQL Server 내) 트랜잭션 내부의 여러 DDL 문을 실행할 수 있습니까? (0) | 2020.04.27 |
---|---|
[SQL] SQL Server 2008의 분할 기능 (0) | 2020.04.27 |
[SQL] T-SQL에서 피벗 데이터 (0) | 2020.04.27 |
[SQL] 어떻게 Google BigQuery에서 범주의 수천 더미 변수 열을 만드는 방법? (0) | 2020.04.27 |
[SQL] 간극없이 시퀀스를 생성 POSTGRESQL (0) | 2020.04.27 |