mysql ORDER BY MIN()与id不匹配

mysql ORDER BY MIN()与id不匹配,mysql,sql-order-by,min,Mysql,Sql Order By,Min,我有一个包含以下列的数据库: ------------------- id|domain|hit_count ------------------- 我想对它执行以下查询: SELECT id,MIN(hit_count) FROM table WHERE domain='$domain' GROUP BY domain ORDER BY MIN(hit_count) 我希望此查询为我提供$domain中命中率最小的行的id。唯一的问题是,如果我有两个具有相同域的行,比如www.bes

我有一个包含以下列的数据库:

-------------------
id|domain|hit_count
-------------------
我想对它执行以下查询:

SELECT id,MIN(hit_count)
  FROM table WHERE domain='$domain'
 GROUP BY domain ORDER BY MIN(hit_count)
我希望此查询为我提供$domain中命中率最小的行的id。唯一的问题是,如果我有两个具有相同域的行,比如www.bestbuy.com,那么查询只会根据最先出现的那一行进行分组,然后尽管我将获得正确的最低命中率,但id可能是也可能不是命中率最低的行的id

有人知道我执行此查询并获取与MINhit_count匹配的id的方法吗?谢谢

试试这个:

SELECT id,hit_count
  FROM table WHERE domain='$domain'
 GROUP BY domain ORDER BY hit_count ASC;
SELECT id,MIN(hit_count),domain FROM table GROUP BY domain HAVING domain='$domain'
这也应该起作用:

select id, MIN(hit_count) from table where domain="$domain";
试试这个:

SELECT id,hit_count
  FROM table WHERE domain='$domain'
 GROUP BY domain ORDER BY hit_count ASC;
SELECT id,MIN(hit_count),domain FROM table GROUP BY domain HAVING domain='$domain'

请参阅,当您使用聚合时,无论是通过聚合函数和min函数,还是通过GROUP BY或HAVING运算符,您的数据都将被分组。在您的情况下,它是按域分组的。您的选择列表中有两个字段,id和minhit\u count

现在,对于每个组,数据库都知道要选择哪个命中计数,正如您通过聚合函数明确指定的那样。但是id呢?应该包括哪一个? MySQL在内部将这些字段包装到max aggregate函数中,我发现这是一种容易出错的方法。在所有其他RDBMS中,这样的查询将出现错误

规则是:如果使用聚合,则所有列都应该是聚合函数的参数或GROUP BY运算符的参数

要获得所需的结果,您需要一个子查询:

选择id、域、命中率 从`表` 其中domain='$domain' 和hit_count=从'table'中选择minhit_count,其中domain='$domain';
我使用了反勾号,因为table在SQL中是一个保留字。

我也有同样的问题。请看下面的问题

您正在使用GROPU。这意味着结果中的每一行代表一组值。 其中一个值是组名,即分组所依据的字段的值。其余的是该组中的任意值。 例如,下表:

F1   |   F2
1         aa
1         bb
1         cc
2         gg
2         hh
如果u将按F1分组:从T按F1分组中选择F1、F2 您将得到两行:

1    and one value from (aa,bb,cc)
2    and one value from (gg,hh)
如果你想要一个确定的结果集,你需要告诉软件什么算法适用于该组。有几个例子:

闵 马克斯 计数 总和
etc etc

有一种最简单的方法,您的查询是可以的,只需在按域分组后使用DESC关键字修改即可

SELECT
  id,
  MIN(hit_count)
FROM table
WHERE domain = '$domain'
GROUP BY domain DESC
ORDER BY MIN(hit_count) 
说明: 使用group by with AGGRATE函数时,它总是选择第一条记录,但如果使用desc关键字对其进行限制,它将选择该组的最低记录或最后一条记录。 要测试puspose,请使用仅添加了group_concat的查询

SELECT
  group_concat(id),
  MIN(hit_count)
FROM table
WHERE domain = '$domain'
GROUP BY domain DESC
ORDER BY MIN(hit_count) 

如果您可以拥有重复的域,请按id分组:

SELECT id,MIN(hit_count)
FROM domain WHERE domain='$domain'
GROUP BY id ORDER BY MIN(hit_count)

您只需要具有特定域的最小命中数的行id。对!!在选择多个字段时,如何在没有GROUP BY子句的情况下使用聚合函数?为什么在没有GROUP BY的情况下不能使用聚合函数??srchulo只需要具有特定域最小计数的行的id。谢谢您选择的不是唯一的id。您正在选择id和minhit_计数是的,我正在选择id和minhit_计数。这不是问题。如果我得到行,我也可以从该行中选择*。不要将表用作表名。表是mysqlthanker中的保留关键字。我只是把它作为示例,而不是我真正的表名。很高兴知道。这需要一个解释。除非我遗漏了什么,否则它也会忘记询问者想要的顺序。