[解決済み] BITフィールドにMIN集計関数を適用する。
2023-02-01 09:26:37
質問
以下のようなクエリを書きたいのですが、どうすればいいですか?
SELECT ..., MIN(SomeBitField), ...
FROM ...
WHERE ...
GROUP BY ...
問題なのは
ビットフィールドの最小値を計算したい場合、SQL Server はそれを好まない。
というエラーが返されることです。
Operand data type bit is invalid for min operator
.
次のような回避策を使うことができますね。
SELECT ..., CAST(MIN(CAST(SomeBitField AS INT)) AS BIT), ...
FROM ...
WHERE ...
GROUP BY ...
しかし、もっとエレガントなものはないのでしょうか? (たとえば、私が知らないだけで、論理的な
and
を評価するような関数があるかもしれません)。
どのように解決するのですか?
の選択肢は2つしかないので
BIT
には2つの選択肢しかないので、caseステートメントを使うだけです。
SELECT CASE WHEN EXISTS (SELECT 1 FROM ....) THEN 1 ELSE 0 END AS 'MinBit'
FROM ...
WHERE ...
という利点があります。
-
テーブルスキャンを強制しない (インデックスが
BIT
フィールドのインデックスはほとんど使用されない) -
ショートサーキット 2回 (1回は
EXISTS
に対してもう一度、そしてCASE
)
書くべきコードが少し増えますが、ひどいことにはならないでしょう。 複数の値をチェックする場合は、より大きな結果セット (すべての
JOIN
と
FILTER
の基準)を
CTE
をクエリの最初に置き、それを
CASE
ステートメントで参照します。
関連
-
SQL-初心者のためのベスト入門SQLクエリ I
-
[解決済み] SQL Server FOR EACH ループ
-
[解決済み] SQL Serverで実行中の合計を計算する
-
[解決済み] DISTINCTでCOUNT(*)を選択する
-
[解決済み] SQL ServerでINSERT INTOとしてデータをエクスポートする
-
[解決済み] SQLサーバーで行を列に効率的に変換する
-
[解決済み】SQL Server SELECT INTO @variable?
-
[解決済み】countとgroup byを同じselect文で使用する方法
-
[解決済み] SQL Serverで定数1または0を持つビットをインプリメントする
-
[解決済み] 列「集約関数またはGROUP BY句に含まれていないため、選択リストでは無効です」。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
MySQL - ストアドプロシージャ (データ型、関数)
-
[解決済み] PostgreSQLのCREATE DATABASE IF NOT EXISTSをシミュレートしてみませんか?
-
[解決済み] アドホッククエリとは何ですか?
-
[解決済み] INNER JOINよりもCROSS APPLYを使用すべきなのはどのような場合ですか?
-
[解決済み] SQL Serverにおける関数とストアドプロシージャの比較
-
[解決済み] SQL JOIN - WHERE句とON句の比較
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] mysqldumpで特定のテーブルをスキップする
-
[解決済み] SQL ServerでGROUP BYを使って文字列を連結する方法とは?
-
[解決済み] 別のテーブルに一致する項目がない行を選択するにはどうすればよいですか?