作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
1> 通过浏览器从logtest组中选择browser,count(*);
+-----------+----------+
| browser | count(*) |
+-----------+----------+
| Firefox 3 | 14 |
| Unknown | 11 |
+-----------+----------+
一组2行
2> 通过浏览器从logtest组中选择browser,count(browser);
+-----------+----------------+
| browser | count(browser) |
+-----------+----------------+
| Firefox 3 | 14 |
| Unknown | 11 |
+-----------+----------------+
一组2行
3> select browser,count(browser) from logtest;
+-----------+----------------+
| browser | count(browser) |
+-----------+----------------+
| Firefox 3 | 25 |
+-----------+----------------+
集合中的 1 行
为什么查询方式1>和2>的结果一样? count(*) 和 count(somefiled) 有什么区别吗?
此外,为什么查询 2> 和 3> 会产生不同的结果,为什么 groupby 如此神奇?它是如何工作的?
更新:我正在使用 MySQL5.1。 :)
最佳答案
一个选择关系给你一个结果集。如果您按字段对选择进行分组,则结果集中的行将按该字段分组,并且结果集中的每一行都将特定于结果组。
例如,您有一个名为 Animals 的表,其中包含以下字段:
Type | Gender | Name
如果您正在运行此查询(例如在 MySQL 中):
select Type, Gender, Name from Animals where Type <> 'Pig'
你会得到所有不是“ pig ”的动物。如果一行的 Type = 'pig',它将包含在结果中。
这个查询:
select Type, Gender, count(*) from Animals group by Type, Gender
将有这么多行:类型数 * 性别数
您可以使用 MySQL 中的 having 子句为您的组设置条件。
阅读更多 here
count(*)
和count(browser)
的区别在于第一个会返回所有记录的条数,第二个会返回所有记录的条数其中不是(浏览器为空)
。
尝试在 browser 为 null
的地方插入一行,然后运行 1) 和 2),这是最好的测试。
关于sql - groupby 和 count 如何在 sql 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4039194/
我是一名优秀的程序员,十分优秀!