1. ホーム
  2. sql

[解決済み】警告。Aqua Data Studioの集約や他のSET操作でNull値が排除される。

2022-02-22 23:51:41

質問事項

データがNULLの場合、結果表示時に警告が表示される問題があります。 どうしたらいいですか。テーブルにデータがない場合、NULLデータを0に変更するにはどうしたらいいですか?

これは私のコードです:-)

SELECT DISTINCT c.username             AS assigner_officer,
                d.description          AS ticketcategory,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NOT NULL
                 GROUP  BY assigned_to)closedcases,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NULL
                 GROUP  BY assigned_to)opencases
FROM   ticket a
       JOIN ticketlog b
         ON a.ticketid = b.ticketid
       JOIN access c
         ON a.assigned_to = c.user_id
       JOIN ticket_category d
         ON a.cat_code = d.id
       JOIN lookup_department e
         ON a.department_code = e.code 

結果は次のようになります。

 Warnings: ---> 
   W (1): Warning: Null value is eliminated by an aggregate or other SET operation.
          <--- 
 assigner_officer     ticketcategory     closedcases     opencases    
 -------------------  -----------------  --------------  ------------ 
 abdulhafiz           Enquiry            (null)          0            
 affan                Enquiry            12              (null)       
 amirul               Enquiry            1               (null)       
 azrul_fahmi          Enquiry            45              0            
 Azwani               Enquiry            (null)          0            
 chai                 Enquiry            4               (null)       
 dalinawati           Enquiry            1               0            
 Emmy                 Complaints         (null)          0            
 Fadhlia              Enquiry            38              0            
 fairulhalif          Others             1               (null)       
 farikh               Enquiry            (null)          0            
 ismailh              Enquiry            28              0            
 izzahanna            Enquiry            (null)          0            
 Kamsuzilawati        Enquiry            1               (null)     

解決方法は?

ほとんどの場合 COUNT を使用して、UIDの上に要約します。 そのため

COUNT([uid]) を実行すると、警告が表示されます。

警告 Null 値が集約または他の SET 操作によって除去されました。

左結合で使用されている間、カウントされたオブジェクトが存在しない場合。

使用方法 COUNT(*) この場合、存在する結果 (つまり親) の総数を数えることになるので、結果も正しく表示されません。

使用方法 COUNT([uid]) これは有効なカウント方法であり、警告は単なる警告に過ぎません。 しかし、もしあなたが心配で、このケースでuidの真のカウントを取得したいのであれば、次のようにすることができます。

SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]

これなら、クエリに多くのオーバーヘッドを追加することはないでしょう。 (テスト済み mssql 2008)