5

(PK) とaの 2 つのフィールドを持つテーブルがあります。idf

次のレコードを検討してください。

id | f
1  | NULL
2  | 'foo'
3  | 'bar'
4  | NULL
5  | 'foo'
6  | 'baz'

fすべてのレコードを含む個別の値を持つすべてのレコードを取得してカウントしたいと考えていますWHERE f IS NULL。この条件を考えると、クエリは #5 を除くすべてのレコードを返す必要があります。これは、同じ値が既にセットに含まれており、合計数が 5 になるためです。

すべてのレコードを取得するために使用しているクエリは次のようになります。

SELECT CASE WHEN EXISTS (SELECT id FROM a a2 WHERE a2.f = a.f AND a.id < a2.id) THEN 1 END AS not_distinct FROM a HAVING not_distinct IS NULL

このクエリを改善できる場合は、フィードバックをお待ちしております。とにかく、主な問題はカウントです。明らかにここで a を追加してCOUNT(*)も役に立たず、フィルタリング後にレコードをカウントする方法が完全に失われています。

4

3 に答える 3

0
    UPDATE comments SET view =     
                              (SELECT COUNT(DISTINCT browser, ip, ifnull(user_id, 0)) 
                              FROM counters WHERE item_type=comments.item_type )
    WHERE id=1
于 2016-05-18T14:16:58.733 に答える