2012-09-06 15 views
1

我们从一组传感器读取数值,偶尔一个或两个传感器丢失了一个特定的传感器,所以现在我再次运行一个查询来查看所有传感器是否具有相同的记录数。MySQL:检查一组查询是否返回相同的行数:::但我不知道计数是多少

GROUP BY sensor_id HAVING COUNT(*) != xxx; 

于是我运行一个查询一次视觉上得到的XXX的值,然后再运行它来看看是否有任何变化。

但是有没有在单个查询中自动执行此操作的巧妙方法?

回答

1
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 
+0

*手动*检查?如果有成千上万的传感器会怎么样? – eggyal

2

你可以这样做:再次

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 
+0

不会group_concat只是提供一个巨大的字符串,将不容易阅读,然后正确的排序结果,因为在我的第一个查询? – mrmryb

+0

@mrmryb:因此,我修改后的答案中的第一个选项。 – eggyal

+0

它可以工作,但如果你有成千上万的结果,并且没有特定的顺序,它仍然会给出一个非常不友好的字符串:[Your Fiddle](http://sqlfiddle.com/#!2/c9aef/ 1) – mrmryb

相关问题