我是 SQLite 的新手,無法找到解決方案。
我有帶有列的 TABLE1col1和col2
col1 col2
-------------
a no
a no
a yes
b no
c yes
c no
d yes
我不想從 col1 重復,但在有“是”時優先考慮 col2
我想要這樣的東西
col1 col2
-------------
a yes
b no
c yes
d yes
uj5u.com熱心網友回復:
您可以嘗試以下操作:
方法一
您可以row_number用來檢索按col2降序排序的行號,該行號可用于過濾您的結果,例如。
SELECT
col1,
col2
FROM (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY col1
ORDER BY col2 DESC
) rn
FROM
my_table
) t
WHERE rn=1;
| 第 1 列 | 列2 |
|---|---|
| 一種 | 是的 |
| 乙 | 不 |
| C | 是的 |
| d | 是的 |
方法二
或者簡單地將 group bycol1與MAX函式一起使用。通過將確保每個組col1值,您將收到MAX的col2是yes,如果可用,no如果沒有。
SELECT
col1,
MAX(col2) as col2
FROM
my_table
GROUP BY
col1;
| 第 1 列 | 列2 |
|---|---|
| 一種 | 是的 |
| 乙 | 不 |
| C | 是的 |
| d | 是的 |
查看 DB Fiddle 上的作業演示
uj5u.com熱心網友回復:
ggordon 的答案足夠好,但只是因為視窗函式不是絕對必要的,我想我會通過另一個解決方案:
select distinct
a.col1,
ifnull(b.col2, 'no') col2
from my_table a
left join (
select distinct
col1,
col2
from my_table
where col2 = 'yes'
) b on a.col1 = b.col1
輸出:
| col1 | col2 |
| ---- | ---- |
| a | yes |
| b | no |
| c | yes |
| d | yes |
uj5u.com熱心網友回復:
您首先要對第一列進行不同的選擇。然后你會想要做一個 case 陳述句,它本質上是其他語言中的 if 陳述句。情況需要是如果第 1 列是是回傳它。如果不是,則回傳 no。它看起來像這樣
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
WHEN conditionN THEN resultN
ELSE result
END;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/346783.html
