MySQL:检查一组查询是否返回相同的行计数::但我不知道计数是多少

MySQL:检查一组查询是否返回相同的行计数::但我不知道计数是多少,mysql,Mysql,我们从一组传感器中读取值,偶尔会丢失某个传感器的一两个读数,因此我会不时运行一个查询,查看是否所有传感器都具有相同的记录计数 GROUP BY sensor_id HAVING COUNT(*) != xxx; 因此,我运行一次查询,以直观地获得xxx的值,然后再次运行它,查看是否有任何变化 SELECT * FROM ( SELECT sensor_id,COUNT(*) AS count FROM table GROUP BY sensor_id ) AS t1 GROUP BY coun

我们从一组传感器中读取值,偶尔会丢失某个传感器的一两个读数,因此我会不时运行一个查询,查看是否所有传感器都具有相同的记录计数

GROUP BY sensor_id HAVING COUNT(*) != xxx;
因此,我运行一次查询,以直观地获得xxx的值,然后再次运行它,查看是否有任何变化

SELECT * FROM (
SELECT sensor_id,COUNT(*) AS count
FROM table
GROUP BY sensor_id
) AS t1
GROUP BY count 
但是,有没有聪明的方法可以在一个查询中自动完成这项工作

SELECT sensor_id,COUNT(*) AS count
FROM table
GROUP BY sensor_id
ORDER BY count
将显示传感器id的列表以及所有记录的计数,然后您可以手动检查是否有任何变化

SELECT * FROM (
SELECT sensor_id,COUNT(*) AS count
FROM table
GROUP BY sensor_id
) AS t1
GROUP BY count 
将显示所有不同的计数,但分组方式将丢失有关哪些传感器ID具有哪些计数的信息

--编辑--

从我和eggyal的答案中提取一点并创建了这个,对于最常见的计数,我称之为id default,然后对于任何突出的值,我给它们单独的行。这样,如果有多个结果,就可以保持表的可读性,如果所有计数都相同,还可以保持一个简单的单行列。然而,如果你对编造的字符串感到满意,那么就用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

手动检查?如果有数千个传感器怎么办?group_concat难道不会像我的第一个查询那样提供一个不太容易阅读的大字符串,然后提供一个正确排序的结果吗?@mrmryb:因此我修改后的答案中有第一个选项。它很有效,但是,如果你有成千上万个结果,都有不同的计数,并且没有特定的顺序,那么它仍然会给出一个非常不友好的字符串:@mrmryb:你误解了我修改后的答案中的第一个选项。它不打算与第二个选项一起使用。它只是OP最初使用的HAVING子句的一个替代品:。