私はこのようなテーブルを持っています
id + kID -------------------------- 0 | 3 1 | 6 2 | 7 3 | 6 4 | 7 5 | 5
私がやりたいことは、kID
一度だけ発生する行の量を見つけることです。したがって、この場合、変数の値は、他のすべてを無視しながらそれを数えようとしているためです2
。kID: 3 and 5 occurs only once
私は本当に困惑しています、助けてくれてありがとう。
これにより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 |
SELECT kID,
COUNT(kID)
FROM tableName
GROUP BY kID
HAVING COUNT(kID) = 1
これを試して
SELECT
id,
count(kID) as `Count`
FROM mytable as t
GROUP BY kID
HAVING Count = 1
どうですか
select count(*) from
(select kid, count(*) from table group by kid having count(*) = 1)
次のことができます。
select count(*) from
(
select kID, COUNT(*) [c] from tableName
group by kID
) t
where t.c = 1
サブセレクトでそれを行うことができます。これはうまくいくはずですが、非常に効率的ではないかもしれません:
SELECT id, kID, COUNT(1) FROM (SELECT COUNT(1),kID FROM TABLE
GROUP BY kID
HAVING COUNT = 1)
それを行うもう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 つだけが実行されます。