使用min(键)获得意外结果

时间:2015-05-28 05:29:53

标签: mysql sql database

我有两个表ss_test和ss_ceastore_config ss_test有一个名为store_id的字段,它映射到ss_ceastore_config id。 我的ss_test包含服务器条目,告诉它正在使用哪个商店 所以我试图找到哪些商店使用最少次数及其ID。 我有下面的查询。

buttonName.setEnabled(false);

我的内部查询给出了正确的结果,如下所示

 select id,
        min(server_counts) as server_counts,
        isalive 
 from (select ss_ceastore_config.id ,
              count(server_id)as server_counts, 
               ss_ceastore_config.isalive 
       from ss_test 
       right join ss_ceastore_config 
       on ss_test.store_id = ss_ceastore_config.id 
       group by store_id 
       order by id) join_1

所以我想使用min函数

从内部查询输出中选择下面的记录
id Ascending    server_counts   isalive
1                 5               1
2                 0               1

但是我的外部查询给出了意想不到的结果,如下所示

id Ascending    server_counts   isalive
2                 0               1
为什么这样呢?为什么它为server_counts 0提供id 1? 如何解决此问题?

1 个答案:

答案 0 :(得分:2)

select id,
    server_counts,
    isalive 
from (select ss_ceastore_config.id ,
          count(server_id)as server_counts, 
           ss_ceastore_config.isalive 
   from ss_test 
   right join ss_ceastore_config 
   on ss_test.store_id = ss_ceastore_config.id 
   group by store_id 
   order by id) join_1
order by server_counts asc
limit 1;

您的原始查询无效,因为您使用SELECT函数以及MIN()id等非聚合列进行汇总isalive。我相信MySQL不保证它将返回哪个 id值以及该列的最小值。

我的策略是按server_counts按升序返回所有行,然后只返回SELECT第一行(这是最小值)。