我们从一组传感器读取数值,偶尔一个或两个传感器丢失了一个特定的传感器,所以现在我再次运行一个查询来查看所有传感器是否具有相同的记录数。MySQL:检查一组查询是否返回相同的行数:::但我不知道计数是多少
GROUP BY sensor_id HAVING COUNT(*) != xxx;
于是我运行一个查询一次视觉上得到的XXX的值,然后再运行它来看看是否有任何变化。
但是有没有在单个查询中自动执行此操作的巧妙方法?
我们从一组传感器读取数值,偶尔一个或两个传感器丢失了一个特定的传感器,所以现在我再次运行一个查询来查看所有传感器是否具有相同的记录数。MySQL:检查一组查询是否返回相同的行数:::但我不知道计数是多少
GROUP BY sensor_id HAVING COUNT(*) != xxx;
于是我运行一个查询一次视觉上得到的XXX的值,然后再运行它来看看是否有任何变化。
但是有没有在单个查询中自动执行此操作的巧妙方法?
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_ids具有哪些计数的信息。
---编辑---
取自两个矿山和eggyal的回答了一下,创造了这个,因为这是最常见的我所说的ID默认计数,然后脱颖而出我的任何值给他们分开的行。如果您有许多结果Multi Row,那么您可以保持表格的可读性,但如果所有计数都相同One Row,则也有简单的一行列。不过,如果你对炮制的琴弦感到满意,那么就可以选择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
你可以这样做:再次
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
*手动*检查?如果有成千上万的传感器会怎么样? – eggyal