我有一个包含以下列的数据库:
-------------------
id|domain|hit_count
-------------------
我想对它执行此查询:
SELECT id,MIN(hit_count)
FROM table WHERE domain='$domain'
GROUP BY domain ORDER BY MIN(hit_count)
我希望此查询能够为我提供$ domain的hit_count最小的行的ID。唯一的问题是,如果我有两行具有相同的域,比如说www.bestbuy.com,那么查询将按照先出的那个进行分组,然后虽然我将得到正确的最低hit_count,但id可能或者可能不是具有最低hit_count的行的id。
有没有人知道我执行此查询并获取与MIN(hit_count)匹配的ID的方法?谢谢!
答案 0 :(得分:1)
试试这个:
SELECT id,MIN(hit_count),domain FROM table GROUP BY domain HAVING domain='$domain'
答案 1 :(得分:1)
当您使用聚合时,通过聚合函数(以及min()
就是这样的函数)或通过GROUP BY
或HAVING
运算符,您的数据正在被分组。在您的情况下,它按域分组。您的选择列表中有2个字段id
和min(hit_count)
。
现在,每个组数据库都知道要选择哪个hit_count
,因为您已通过聚合函数明确指定了它。但是id
怎么样 - 应该包括哪一个?
MySQL内部将这些字段包装到max()
聚合函数中,我发现这是一种容易出错的方法。在所有其他RDBMS中,您将收到此类查询的错误。
规则是:如果您使用聚合,那么所有列应该是聚合函数的参数或GROUP BY
运算符的参数。
要获得所需的结果,您需要一个子查询:
SELECT id, domain, hit_count
FROM `table`
WHERE domain = '$domain'
AND hit_count = (SELECT min(hit_count) FROM `table` WHERE domain = '$domain');
我使用了反引号,因为table
是SQL中的保留字。
答案 2 :(得分:0)
试试这个:
SELECT id,hit_count
FROM table WHERE domain='$domain'
GROUP BY domain ORDER BY hit_count ASC;
这也应该有效:
select id, MIN(hit_count) from table where domain="$domain";
答案 3 :(得分:0)
SELECT
id,
hit_count
FROM
table
WHERE
domain='$domain'
AND hit_count = (SELECT MIN(hit_count) FROM table WHERE domain='$domain')
答案 4 :(得分:0)
我有同样的问题。请在下面看到这个问题。
<强> min(column) is not returning me correct data of other columns 强>
您正在使用GROPU BY。这意味着结果中的每一行代表一个组值。 其中一个值是组名称(按组分组的字段的值)。其余的是该组内的任意值 例如下表:
F1 | F2
1 aa
1 bb
1 cc
2 gg
2 hh
如果您要按F1分组:SELECT F1,F2 from T GROUP BY F1
你会得到两行:
1 and one value from (aa,bb,cc)
2 and one value from (gg,hh)
如果你想要一个确定性的结果集,你需要告诉软件什么算法适用于该组。例如:
等等
答案 5 :(得分:0)
您的查询有一种最简单的方式,只需在GROUP BY域
之后使用DESC关键字进行修改即可SELECT
id,
MIN(hit_count)
FROM table
WHERE domain = '$domain'
GROUP BY domain DESC
ORDER BY MIN(hit_count)
说明:
当您使用group by with aggregate function时,它总是选择第一条记录,但如果使用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)
答案 6 :(得分:0)
如果您可以按ID包含重复的域组:
SELECT id,MIN(hit_count)
FROM domain WHERE domain='$domain'
GROUP BY id ORDER BY MIN(hit_count)