一連のセンサーから値を読み取りますが、特定のセンサーの読み取り値が 1 つまたは 2 つ失われることがあるため、すべてのセンサーのレコード数が同じかどうかを確認するクエリを時々実行します。
GROUP BY sensor_id HAVING COUNT(*) != xxx;
そのため、クエリを 1 回実行して xxx の値を視覚的に取得し、再度実行して変化があるかどうかを確認します。
しかし、単一のクエリでこれを自動的に行う賢い方法はありますか?
一連のセンサーから値を読み取りますが、特定のセンサーの読み取り値が 1 つまたは 2 つ失われることがあるため、すべてのセンサーのレコード数が同じかどうかを確認するクエリを時々実行します。
GROUP BY sensor_id HAVING COUNT(*) != xxx;
そのため、クエリを 1 回実行して xxx の値を視覚的に取得し、再度実行して変化があるかどうかを確認します。
しかし、単一のクエリでこれを自動的に行う賢い方法はありますか?
あなたがすることができます:
HAVING COUNT(*) != (SELECT MAX(count) FROM (
SELECT COUNT(*) AS count FROM my_table GROUP BY sensor_id
) t)
または、各グループのカウントで再度グループ化します (最初の結果は無視します)。
SELECT count, GROUP_CONCAT(sensor_id) AS sensors
FROM (
SELECT sensor_id, COUNT(*) AS count FROM my_table GROUP BY sensor_id
) t
GROUP BY count
ORDER BY count DESC
LIMIT 1, 18446744073709551615
SELECT sensor_id,COUNT(*) AS count
FROM table
GROUP BY sensor_id
ORDER BY count
sensor_id のリストとそれに含まれるすべてのレコードの数が表示されます。その後、変化があるかどうかを手動で確認できます。
SELECT * FROM (
SELECT sensor_id,COUNT(*) AS count
FROM table
GROUP BY sensor_id
) AS t1
GROUP BY count
変化するすべてのカウントが表示されますが、group by では、どの sensor_id にどのカウントがあるかに関する情報が失われます。
- -編集 - -
私の答えとeggyalの答えの両方から少し取って、これを作成しました。最も頻繁に発生するカウントについては、idのデフォルトと呼び、目立つ値については、別々の行を与えました。このようにして、多数の結果Multi Rowがある場合にテーブルの読みやすさを維持しますが、すべてのカウントが同じOne Rowである場合は単純な 1 行の列もあります。ただし、作成された文字列に満足している場合は、eggyal の回答を使用してください。少しやり過ぎかもしれませんが、次のようになります。
select 'default' as id,t5.c1 as count from(
select id,count(*) as c1 from your_table group by id having count(*)=
(select t4.count from
(
select max(t3.count2) as max,t3.count as count from
(
select count(*) as count2,t2.count from
(
SELECT id,COUNT(*) AS count
FROM your_table
GROUP BY id
) as t2
GROUP BY count
) as t3
) as t4)) as t5 group by count
union all
select t5.id as id,t5.c1 as count from(
select id,count(*) as c1 from your_table group by id having count(*)<>
(select t4.count from
(
select max(t3.count2) as max,t3.count as count from
(
select count(*) as count2,t2.count from
(
SELECT id,COUNT(*) AS count
FROM your_table
GROUP BY id
) as t2
GROUP BY count
) as t3
) as t4)) as t5