내 테이블에는 Speed
(정수) 라는 단일 열 이 있으며 해당 목록에서 25 %, 50 %, ... 값보다 큰 값을 선택해야합니다.
샘플 데이터 :
+-------+
| Speed |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+-------+
원하는 출력 :
+--------+
| OUTPUT |
+--------+
| 3 |
| 5 |
| 8 |
+--------+
설명:
데이터를 정렬하고 다음과 같이해야한다고 생각합니다.
SELECT speed
FROM my_table
WHERE speed IN (ROUND(0.25 * <total_row>), ROUND(0.50 * <total_row>),..)
하지만 그 <total_row>
참조 를 얻는 방법을 모르겠습니다 . 내가 그냥 SELECT COUNT(speed) AS total_row
해서 나중에 사용할 수 있다면 좋을 것입니다.
정말 고맙습니다.
create table Speed Engine=Memory
as select number+1 X from numbers(10);
SELECT quantilesExact(0.25, 0.5, 0.75)(X)
FROM Speed
┌─quantilesExact(0.25, 0.5, 0.75)(X)─┐
│ [3,6,8] │
└────────────────────────────────────┘
SELECT arrayJoin(quantilesExact(0.25, 0.5, 0.75)(X)) AS q
FROM Speed
┌─q─┐
│ 3 │
│ 6 │
│ 8 │
└───┘
SELECT arrayJoin(quantilesExact(0.25, 0.499999999999, 0.75)(X)) AS q
FROM Speed
┌─q─┐
│ 3 │
│ 5 │
│ 8 │
└───┘
CH 영역에서 Join은 일반적으로 수십억 개의 행이기 때문에 적용 할 수 없습니다.
create table Speed Engine=MergeTree order by X as select number X from numbers(1000000000);
SELECT quantilesExact(0.25, 0.5, 0.75)(X)
FROM Speed
┌─quantilesExact(0.25, 0.5, 0.75)(X)─┐
│ [250000000,500000000,750000000] │
└────────────────────────────────────┘
1 rows in set. Elapsed: 7.974 sec. Processed 1.00 billion rows,
SELECT quantiles(0.25, 0.5, 0.75)(X)
FROM Speed
┌─quantiles(0.25, 0.5, 0.75)(X)────────┐
│ [244782599,500713390.5,751014086.75] │
└──────────────────────────────────────┘
1 rows in set. Elapsed: 1.274 sec. Processed 1.00 billion rows
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다