我的 MariaDB 資料庫中有下表“數字”:
| ID | 數字 |
|---|---|
| 1 | 25 |
| 2 | 41 |
| 3 | 3 |
| 4 | 73 |
| 5 | 38 |
| 6 | 41 |
| 7 | 12 |
| 8 | 14 |
現在我想創建一個讓我看到的視圖:
- 第 1 列:所有可能的數字(不同的)
- 第 2 列:該數字的出現次數
- 第 3 列:最后一個 ID 與該編號的 ID 之間的 ID 數量。
這將導致這種觀點:
| 數字 | 事件 | ID差異 |
|---|---|---|
| 3 | 1 | 5 |
| 12 | 1 | 1 |
| 14 | 1 | 0 |
| 25 | 1 | 7 |
| 38 | 1 | 3 |
| 41 | 2 | 2 |
| 73 | 1 | 4 |
所以我開始:
SELECT DISTINCT number FROM numbers
然后在同一個表上進行左連接 count ,但這會使查詢速度變慢(而且它沒有按我想要的方式作業)。你知道如何解決這個問題嗎?提前非常感謝!
uj5u.com熱心網友回復:
喲可以按數字分組并使用COUNT()聚合函式來獲取列occurrences和MAX()視窗函式來獲取列IDdifferences:
SELECT number,
COUNT(*) occurrences,
MAX(MAX(id)) OVER () - MAX(id) IDdifferences
FROM numbers
GROUP BY number
ORDER BY number;
如果 id 之間有間隙:
SELECT number,
COUNT(*) occurrences,
MAX(MAX(rn)) OVER () - MAX(rn) IDdifferences
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id) rn FROM numbers) t
GROUP BY number
ORDER BY number;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439325.html
下一篇:通過Join在SQL中獲取平均值
