這是目前的情況:
表格1
| 鑰匙 | some_id | 日期 | 班級 |
|---|---|---|---|
| 1 | 1 | 1.1.2000 | 2 |
| 1 | 2 | 1.1.2000 | 2 |
| 2 | 1 | 1.1.1999 | 3 |
| ... | ... | ... | ... |
我正在計算類并使用以下 select 陳述句通過視圖提供資訊:
SELECT key, date, class, count(class) as cnt
FROM table1
GROUP BY key, date, class
結果將是:
| 鑰匙 | 日期 | 班級 | cnt |
|---|---|---|---|
| 1 | 1.1.2000 | 2 | 2 |
| 2 | 1.1.1999 | 3 | 1 |
| ... | ... | ... | ... |
但現在有另一個表,其中包括所有可能的類代碼,例如
| 引數鍵 | 班級代碼 |
|---|---|
| 1 | 1 |
| 1 | 2 |
| 1 | 3 |
| 2 | 1 |
| ... | ... |
對于我的觀點,我只查詢parameter_key1的資料。視圖現在需要顯示所有可能的 class_code,如果計數為 0 也是如此。
所以我想要的結果表是:
| 鑰匙 | 日期 | 班級 | cnt |
|---|---|---|---|
| 1 | 1.1.2000 | 1 | 0 |
| 1 | 1.1.2000 | 2 | 2 |
| 1 | 1.1.2000 | 3 | 0 |
| 2 | 1.1.1999 | 1 | 0 |
| 2 | 1.1.1999 | 2 | 0 |
| 2 | 1.1.1999 | 3 | 1 |
| ... | ... | ... | ... |
但我就是想不通如何做到這一點。我試圖添加一個right join這樣的,但這并沒有改變任何東西(可能是因為我加入了類列并做了一個聚合,如果沒有什么可計算的就不會顯示?):
SELECT key, date, class, count(class) as cnt
FROM table1
RIGHT JOIN table2 on table1.class = table2.class and table2.parameter_key = 1
GROUP BY key, date, class
關于如何實作所需結果表的任何想法?
uj5u.com熱心網友回復:
使用PARTITIONed 連接:
SELECT t2.parameter_key AS key,
t1."DATE",
t2.class_code AS class,
count(t1.class) as cnt
FROM table2 t2
LEFT OUTER JOIN table1 t1
PARTITION BY (t1."DATE")
ON (t1.class = t2.class_code AND t1.key = t2.parameter_key)
WHERE t2.parameter_key = 1
GROUP BY
t2.parameter_key,
t1."DATE",
t2.class_code
其中,對于樣本資料:
CREATE TABLE table1 (key, some_id, "DATE", class) AS
SELECT 1, 1, DATE '2000-01-01', 2 FROM DUAL UNION ALL
SELECT 1, 2, DATE '2000-01-01', 2 FROM DUAL UNION ALL
SELECT 2, 1, DATE '1999-01-01', 3 FROM DUAL;
CREATE TABLE table2 (parameter_key, class_code) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 1, 2 FROM DUAL UNION ALL
SELECT 1, 3 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL;
輸出:
鑰匙 日期 班級 碳納米管 1 1999-01-01 00:00:00 1 0 1 1999-01-01 00:00:00 2 0 1 1999-01-01 00:00:00 3 0 1 2000-01-01 00:00:00 1 0 1 2000-01-01 00:00:00 2 2 1 2000-01-01 00:00:00 3 0
或者,取決于您希望如何管理連接條件:
SELECT t1.key,
t1."DATE",
t2.class_code AS class,
count(t1.class) as cnt
FROM table2 t2
LEFT OUTER JOIN table1 t1
PARTITION BY (t1.key, t1."DATE")
ON (t1.class = t2.class_code)
WHERE t2.parameter_key = 1
GROUP BY
t1.key,
t1."DATE",
t2.class_code
哪個輸出:
鑰匙 日期 班級 碳納米管 1 2000-01-01 00:00:00 1 0 1 2000-01-01 00:00:00 2 2 1 2000-01-01 00:00:00 3 0 2 1999-01-01 00:00:00 1 0 2 1999-01-01 00:00:00 2 0 2 1999-01-01 00:00:00 3 1
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/488370.html
