2017-09-01 17 views
-1

私は、またはNULLになることができるposition列を持つ行の束を持っています。NULL値を持つ行の相違

行の日付は連続しており、私が探しているのは、positionフィールドが前日と異なる行数を取得することです。

私は、次のようなものを持っている:http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=c67fed3a0b65f875fec1cf7d1992b69b

これは素晴らしい作品が、問題はpositionNULLすることができ、以下は動作しません、次のとおりです。http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=f61b5407f178210bc50aadfd3427639c

は私を変更する方法はありますクエリには、NULLの行も含まれますか?

おかげ

+0

サンプルの入力データ、既存のクエリ、予想される結果セット、および書式付きテキストを含めるには、投稿を編集してください。これにより投稿がかなり読みやすくなり、正しい答えを得るチャンスが増えます。 –

+0

@sipher_zあなたのクエリは、あなたが期待したことをしません。あなたは '1!= null'が真であると仮定しているようです。実際、 '1!= null'は' null'であり、あなたの合計ではゼロとしてカウントされます。ここでは、 'null'を含む比較がfalseであることを説明するためのフィドルです:http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=50a31a771a52ff281cafa1efacb2c98a – Misha

答えて

0

2番目の例は同様にあなたが次のことを変更した場合に動作します:

  • 「nullでない」除去することにより、位置の欄「NULL可能」にする表を作成してからの引用を削除します'NULL'

SUM(CASEを次のように変更

  • 合計を、それを挿入するときいつIFNULL(r1。 position、0)!= IFNULL(R2。position、0)THEN 1 ELSE 0 END)

    http://dbfiddle.uk/?rdbms=mariadb_10.2&fiddle=bd00e6ed47872d05f544842ade631f6a

  • +0

    こんにちは、ありがとう。正しい列とデータで例を更新しました。あなたの例では、 '0'行を返しています。 '2015-05-16'が' NULL'で、 '2015-05-17'が' 22'なので、値が異なるので、クエリの出力は '1'になると思います。 –

    +0

    私はフィドルに答えて、それを働かせてください。 1つの値がnullの場合、r1とr2の位置の比較はnullです。 – wheeler

    0

    ながら挿入

    INSERT INTO `rankings` (`id`, `position`, `date`, `ranking_id`) VALUES 
        ('1', '22', '2015-05-14', '1'), 
        ('2', '22', '2015-05-15', '1'), 
        ('3', null , '2015-05-16', '1'), 
        ('4', '22', '2015-05-17', '1'); 
    

    は、以下の文字列で検索してください下のようにヌルから''を削除

    SELECT r1.`date`, SUM(CASE WHEN r1.`position` != r2.`position` THEN 1 ELSE 0 END) as daily_changes 
    FROM `rankings` r1 
    LEFT JOIN `rankings` r2 
        ON r1.`date` = r2.`date` + 1 
    AND r1.`ranking_id` = r2.`ranking_id` 
    WHERE r1.position IS NOT NULL OR r2.position IS NOT NULL 
    GROUP BY r1.`date` 
    order by r1.`date` DESC 
    limit 1 
    
    +0

    NULL値は整数とは別のものを含める必要があります。したがって、idが3の上記の例の行では、idが4の行と異なるため、結果は4になります –

    関連する問題