0

私はこのようなテーブルを持っています

id + kID       
--------------------------
0 | 3
1 | 6
2 | 7
3 | 6
4 | 7
5 | 5

私がやりたいことは、kID一度だけ発生する行の量を見つけることです。したがって、この場合、変数の値は、他のすべてを無視しながらそれを数えようとしているためです2kID: 3 and 5 occurs only once私は本当に困惑しています、助けてくれてありがとう。

4

7 に答える 7

4

これによりkID、一度だけ発生するが表示されます。

SELECT kID, COUNT(kID)
FROM table
GROUP BY kID
HAVING COUNT(kID) < 2

結果

| | キッド | カウント(キッド) |
--------------------
| | 3 | 1 |
| | 5 | 1 |

デモを見る

次に、それらの合計数を取得します。

SELECT Count(*) AS count 
FROM   (SELECT kid, 
               Count(kid) 
        FROM   tbl 
        GROUP  BY kid 
        HAVING Count(kid) < 2) a

結果

| | カウント |
----------
| | 2 |

デモを見る

于 2013-03-04T18:25:13.993 に答える
0
SELECT kID, 
COUNT(kID) 
FROM tableName
GROUP BY kID
HAVING COUNT(kID) = 1
于 2013-03-04T18:26:39.753 に答える
0

これを試して

SELECT
  id,
  count(kID) as `Count`
FROM mytable as t
GROUP BY kID
HAVING Count = 1
于 2013-03-04T18:25:21.203 に答える
0

どうですか

select count(*) from 
(select kid, count(*) from table group by kid having count(*) = 1)
于 2013-03-04T18:25:25.707 に答える
0

次のことができます。

select count(*) from 
(
    select kID, COUNT(*) [c] from tableName
    group by kID
) t
where t.c = 1
于 2013-03-04T18:26:31.807 に答える
0

サブセレクトでそれを行うことができます。これはうまくいくはずですが、非常に効率的ではないかもしれません:

SELECT id, kID, COUNT(1) FROM (SELECT COUNT(1),kID FROM TABLE
                               GROUP BY kID
                               HAVING COUNT = 1)
于 2013-03-04T18:28:46.283 に答える
0

それを行うもう1つの方法。(id)がテーブルの主キーであるか、に一意の制約がある限り機能し(kid, id)ます。

SELECT COUNT(*) AS cnt
FROM
  ( SELECT NULL
    FROM tableX
    GROUP BY kid
    HAVING MIN(id) = MAX(id) 
  ) AS g ;

SQL-Fiddleでテスト済み

インデックスを on(kid, id)にすると効率が向上します - そしてCOUNT()2 つではなく 1 つだけが実行されます。

于 2013-03-04T18:39:13.443 に答える