我有兩個表,我想做一個full outer join,結果視圖將值表分成兩個單獨的列,每個列有一行name_id。我采用了一種方法,使用CASE運算式按型別進行選擇,然后將其與 pandas 一起使用來填充值并回傳不同的 name_ids。
名稱表
| name_id | 姓名 |
|---|---|
| 1 | 富 |
| 2 | 酒吧 |
| 3 | 斗 |
| 4 | 起訴 |
值表
| name_id | 價值 | 型別 |
|---|---|---|
| 1 | 90 | 紅色的 |
| 2 | 95 | 藍色 |
| 3 | 33 | 紅色的 |
| 3 | 35 | 藍色 |
| 4 | 60 | 藍色 |
| 4 | 20 | 紅色的 |
這是一個精簡版。在我的完整表中,我需要使用兩個按型別、紅色/藍色和對照/安慰劑排序的單獨值表來執行此操作兩次。
簡單連接
SELECT names_table.name_id, name, value, type
FULL OUTER JOIN values_table
ON names_table.name_id = values_table.name_id
WHERE type in ('red', 'blue')
| name_id | 姓名 | 價值 | 型別 |
|---|---|---|---|
| 1 | 富 | 90 | 紅色的 |
| 2 | 酒吧 | 95 | 藍色 |
| 3 | 斗 | 33 | 紅色的 |
| 3 | 斗 | 35 | 藍色 |
| 4 | 起訴 | 60 | 藍色 |
| 4 | 起訴 | 20 | 紅色的 |
當前解決結果的方法,然后我用 python 和 pandas 修復
SELECT names_table.name_id, name, value, type
CASE
WHEN type = 'red' THEN value END red,
CASE
WHEN type = 'blue' THEN value END blue
FROM names_table
FULL OUTER JOIN values_table
ON names_table.name_id = values_table.name_id
| name_id | 姓名 | 藍色 | 紅色的 |
|---|---|---|---|
| 1 | 富 | 空值 | 90 |
| 2 | 酒吧 | 95 | 空值 |
| 3 | 斗 | 35 | 空值 |
| 3 | 斗 | 空值 | 33 |
| 4 | 起訴 | 60 | 空值 |
| 4 | 起訴 | 空值 | 20 |
這是我想要的下面的輸出,其中我將型別作為列,只有唯一 name_ids 的行,但具有值表 1 和 2。
期望的輸出
| name_id | 姓名 | 藍色 | 紅色的 |
|---|---|---|---|
| 1 | 富 | 空值 | 90 |
| 2 | 酒吧 | 95 | 空值 |
| 3 | 斗 | 35 | 33 |
| 4 | 起訴 | 60 | 20 |
uj5u.com熱心網友回復:
我有兩張桌子,我想做一個
full outer join...
你為什么要?更好地解釋你真正想要做什么,而不是假設的工具來實作它。
FILTER使用聚合子句進行簡單的旋轉。看:
- 使用其他(不同的)過濾器聚合列
SELECT name_id, n.name, v.blue, v.red
FROM (
SELECT name_id
, min(value) FILTER (WHERE type = 'blue') AS blue
, min(value) FILTER (WHERE type = 'red') AS red
FROM values_table
GROUP BY 1
) v
LEFT JOIN names_table n USING (name_id);
產生您想要的結果。
db<>在這里擺弄
LEFT JOIN即使沒有找到名稱,也包括結果行。AFULL [OUTER] JOIN將在結果中添加根本沒有值的名稱。我想你真的想要一個LEFT [OUTER] JOIN甚至是一個普通的[INNER] JOIN.
您可以切換JOIN型別以適應您的實際需求。相同的列名“name_id”允許加入USING子句。name_id外部的不合格項SELECT適用于任何連接型別。
請注意我如何先聚合,然后再加入。通常要快得多。看:
- 使用 LEFT JOIN 查詢不回傳計數為 0 的行
如果“紅色”或“藍色”的值可能重復,則必須定義如何處理這些值。
對于更多涉及的查詢,請考慮crosstab()。看:
- PostgreSQL 交叉表查詢
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/439759.html
標籤:sql PostgreSQL 枢 总计的
上一篇:無限制的解決方案
下一篇:按月/年和id獲取最后一條記錄
