某列为空时选择前面的非空值
如题,前端时间群里有人问的这个问题,正好有空,就关注了一下。 现状 dbone=# select * from tb_test;id | uname | addr----+-------+------1 | a |2 | a |3 | |4 | |5 | |6 | bb |7 | |8 | |9 | x |10 | |(10 rows)期望结果:id | uname----+-------1 | a2
如题,前端时间群里有人问的这个问题,正好有空,就关注了一下。
现状
dbone=# select * from tb_test; id | uname | addr ----+-------+------ 1 | a | 2 | a | 3 | | 4 | | 5 | | 6 | bb | 7 | | 8 | | 9 | x | 10 | | (10 rows) 期望结果: id | uname ----+------- 1 | a 2 | a 3 | a 4 | a 5 | a 6 | bb 7 | bb 8 | bb 9 | x 10 | x (10 rows) 可以如下: dbone=# select b.id, case when b.uname!='' then b.uname else (select a.uname from tb_test a where a.uname!='' and a.id<b.id order by a.id desc limit 1) end from tb_test b order by b.id; id | uname ----+------- 1 | a 2 | a 3 | a 4 | a 5 | a 6 | bb 7 | bb 8 | bb 9 | x 10 | x (10 rows)
也可以用窗口函数,如下:
dbone=# SELECT dbone-# id, uname, uname_partition, first_value(uname) over (partition by uname_partition order by id) dbone-# FROM ( dbone(# SELECT dbone(# id, dbone(# uname, dbone(# sum(case when uname is null then 0 else 1 end) over (order by id) as uname_partition dbone(# FROM tb_test dbone(# ORDER BY id ASC dbone(# ) as q; id | uname | uname_partition | first_value ----+-------+-----------------+------------- 1 | a | 1 | a 2 | a | 2 | a 3 | | 2 | a 4 | | 2 | a 5 | | 2 | a 6 | bb | 3 | bb 7 | | 3 | bb 8 | | 3 | bb 9 | x | 4 | x 10 | | 4 | x (10 rows) dbone=# \timing Timing is on. dbone=# SELECT id, uname, uname_partition, first_value(uname) over (partition by uname_partition order by id) FROM ( SELECT id, uname, sum(case when uname is null then 0 else 1 end) over (order by id) as uname_partition FROM tb_test ORDER BY id ASC ) as q; id | uname | uname_partition | first_value ----+-------+-----------------+------------- 1 | a | 1 | a 2 | a | 2 | a 3 | | 2 | a 4 | | 2 | a 5 | | 2 | a 6 | bb | 3 | bb 7 | | 3 | bb 8 | | 3 | bb 9 | x | 4 | x 10 | | 4 | x (10 rows) Time: 0.805 ms dbone=# select b.id, case when b.uname!='' then b.uname else (select a.uname from tb_test a where a.uname!='' and a.id<b.id order by a.id desc limit 1) end from tb_test b order by b.id; id | uname ----+------- 1 | a 2 | a 3 | a 4 | a 5 | a 6 | bb 7 | bb 8 | bb 9 | x 10 | x (10 rows) Time: 0.920 ms dbone=# dbone=# explain select b.id, case when b.uname!='' then b.uname else (select a.uname from tb_test a where a.uname!='' and a.id<b.id order by a.id desc limit 1) end from tb_test b order by b.id; QUERY PLAN ------------------------------------------------------------------------------------ Sort (cost=12.97..12.99 rows=10 width=82) Sort Key: b.id -> Seq Scan on tb_test b (cost=0.00..12.80 rows=10 width=82) SubPlan 1 -> Limit (cost=1.16..1.17 rows=1 width=82) -> Sort (cost=1.16..1.17 rows=3 width=82) Sort Key: a.id -> Seq Scan on tb_test a (cost=0.00..1.15 rows=3 width=82) Filter: (((uname)::text <> ''::text) AND (id < b.id)) (9 rows) Time: 1.880 ms dbone=# dbone=# dbone=# dbone=# dbone=# dbone=# explain SELECT id, uname, uname_partition, first_value(uname) over (partition by uname_partition order by id) FROM ( SELECT id, uname, sum(case when uname is null then 0 else 1 end) over (order by id) as uname_partition FROM tb_test ORDER BY id ASC ) as q; QUERY PLAN --------------------------------------------------------------------------------------- WindowAgg (cost=1.71..1.91 rows=10 width=90) -> Sort (cost=1.71..1.73 rows=10 width=90) Sort Key: q.uname_partition, q.id -> Subquery Scan on q (cost=1.27..1.54 rows=10 width=90) -> WindowAgg (cost=1.27..1.44 rows=10 width=82) -> Sort (cost=1.27..1.29 rows=10 width=82) Sort Key: tb_test.id -> Seq Scan on tb_test (cost=0.00..1.10 rows=10 width=82) (8 rows) Time: 0.770 ms
这儿只有十条记录,性能相差不大,如果记录多还是要用窗口函数来的快

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











WallpaperEngine は、デスクトップの壁紙を設定するためによく使用されるソフトウェアです。ユーザーは、WallpaperEngine でお気に入りの写真を検索して、デスクトップの壁紙を生成できます。また、コンピュータから写真を WallpaperEngine に追加して、コンピュータの壁紙として設定することもできます。壁紙エンジンがロック画面の壁紙を設定する方法を見てみましょう。壁紙エンジン設定ロック画面の壁紙チュートリアル 1. まずソフトウェアに入り、インストール済みを選択し、「壁紙オプションの設定」をクリックします。 2. 別の設定で壁紙を選択した後、右下の「OK」をクリックする必要があります。 3. 次に、上の設定とプレビューをクリックします。 4. 次へ

壁紙はファミリー共有をサポートしていますか? 残念ながら、サポートされていません。それでも、解決策はあります。たとえば、小さいアカウントで購入したり、最初に大きいアカウントでソフトウェアや壁紙をダウンロードしてから小さいアカウントに変更したりすることができます。ソフトウェアを起動するだけでまったく問題ありません。壁紙エンジンはファミリー共有できますか? 回答: 現在、壁紙はファミリー共有機能をサポートしていません。 1.WallpaperEngine は家族共有環境には適していないようです。 2. この問題を解決するには、新しいアカウントの購入を検討することをお勧めします; 3. または、最初にメインアカウントで必要なソフトウェアと壁紙をダウンロードしてから、他のアカウントに切り替えることをお勧めします。 4. 軽くクリックしてソフトウェアを開くだけで問題ありません。 5. 上記の Web ページでプロパティを表示できます。」

Douyin プラットフォームでは、多くのユーザーがレベル認定の取得を熱望しており、レベル 10 の光サインは、Douyin に対するユーザーの影響力と認知度を示しています。この記事では、ユーザーがプロセスをよりよく理解できるように、Douyin のレベル 10 ライト ボードの価格と、このレベルに到達するまでにかかる時間を詳しく掘り下げます。 1. レベル10のDouyinライトサインの価格はいくらですか? Douyinの10段階ライトサインの価格は市場の変動や需要と供給によって異なり、一般的な価格は数千元から1万元の範囲です。この価格には主に照明サイン自体の費用と、場合によってはサービス料が含まれます。ユーザーは、Douyin の公式チャネルまたはサードパーティのサービス代理店を通じてレベル 10 のライト サインを購入できますが、虚偽または詐欺的な取引を避けるために、購入する際には法的チャネルに注意する必要があります。 2. レベル 10 のファンサインを作成するには何日かかりますか?レベル10のライトサインに到達する

壁紙を利用する場合、ユーザーは自分の好みの壁紙をダウンロードして利用することができますが、その壁紙がどのフォルダーにあるのか分からないユーザーも多くいます。壁紙はどのフォルダにありますか? 答え: コンテンツ フォルダです。 1. ファイルエクスプローラーを開きます。 2. 左側の「このPC」をクリックします。 3.「STEAM」フォルダーを見つけます。 4.「steamapps」を選択します。 5.「ワークショップ」をクリックします。 6. 「コンテンツ」フォルダーを見つけます。

WallpaperEngine を使用すると、さまざまな壁紙をダウンロードでき、ダイナミック壁紙も使用できます。WallpaperEngine で動画を視聴するときにウイルスに感染しているかどうかわからないユーザーも多くいますが、動画ファイルがウイルスとして使用されることはありません。壁紙エンジンで映画を見るときにウイルスはありますか? 答え: いいえ。 1. 動画ファイルだけではウイルスとして利用できません。 2. ウイルス感染のリスクを避けるために、信頼できるソースからビデオをダウンロードし、コンピュータのセキュリティ対策を維持するようにしてください。 3. アプリケーションの壁紙は apk 形式であり、apk にはトロイの木馬ウイルスが含まれている可能性があります。 4.WallpaperEngine自体にはウイルスはありませんが、クリエイティブワークショップの一部のアプリケーション壁紙にはウイルスが感染している可能性があります。

Xiaohonshu は、生活と知識の共有に満ちたプラットフォームで、ますます多くのクリエイターが自由に意見を表現できるようになりました。小紅書でより多くの注目といいねを獲得するには、コンテンツの質に加えて、作品を公開する時期も重要です。では、Xiaohongshu が作品を公開する時間をどのように設定すればよいでしょうか? 1. 小紅書で作品を公開する時間を設定するにはどうすればよいですか? 1. ユーザーのアクティブ時間を把握する まず、小紅書ユーザーのアクティブ時間を明確にする必要があります。一般に、午後 8 時から午後 10 時までと週末の午後は、ユーザーのアクティビティが活発になる時間帯です。ただし、この期間は視聴者グループや地理などの要因によっても異なります。したがって、ユーザーのアクティブ期間をより適切に把握するには、さまざまなグループの行動習慣をより詳細に分析することをお勧めします。ユーザーの生活を理解することで

ユーザーは、WallpaperEngine を使用するときに自分のコンピュータの壁紙を変更できます。多くのユーザーは、WallpaperEngine が大量の電力を消費することを知りません。動的壁紙は静的壁紙よりも若干多くの電力を消費しますが、それほど多くはありません。壁紙エンジンは多くの電力を消費しますか? 回答: それほど多くはありません。 1. 動的壁紙は静的壁紙よりも若干多くの電力を消費しますが、それほど多くはありません。 2. ダイナミック壁紙をオンにすると、コンピュータの電力消費量が増加し、少量のメモリ使用量が奪われます。 3. ユーザーは、ダイナミック壁紙の深刻な電力消費を心配する必要はありません。

プレイヤーはエルデンズ サークルでプレイするときにゲームのメイン プロットを体験し、ゲームの実績を収集できます。多くのプレイヤーはエルデンズ サークルをクリアするのにどれくらい時間がかかるか知りません。プレイヤーのクリア プロセスは 30 時間です。エルデン リングをクリアするにはどれくらい時間がかかりますか? 答え: 30 時間です。 1. この 30 時間のクリアタイムはマスターのようなスピードパスを指すものではありませんが、多くのプロセスも省略されます。 2. より良いゲーム体験を得たい場合、または完全なプロットを体験したい場合は、継続時間により多くの時間を費やす必要があります。 3. プレイヤーがすべて集める場合、約 100 ~ 120 時間かかります。 4.BOSSを本筋だけで磨く場合は50~60時間程度かかります。 5. すべてを体験したい場合: 基本時間は 150 時間です。
