问题描述
- 想知道SQL group by的一个问题。小白求教。。
-
比如现有表Ad_inf
_id name describe
1 test1 d1
2 test2 d2
3 test2 d2
4 test2 d3
5 test3 d2
6 test4 d4执行select * from Ad_inf group by name,describe 得到的是什么样的?
解决方案
select * from Ad_inf group by name,describe
如果你是使用oracle查询,这个句子会报错。
group by 的字段需要在sql中查询出来,分组字段可以不用聚合,如果报错,根据错误提醒就能搞定,
建议查找group by 知识点实践一下,例如:
select min( _id),name,describe from Ad_inf group by name,describe
得到的结果跟你写出的结果一样。
解决方案二:
应该还是你现在查的格式,.group by一般是用在sum,count这样的函数里面的
解决方案三:
group by一般要用sum,count这样的聚合函数
解决方案四:
这个地方要报错,建议你看看相关的书籍
解决方案五:
group by name,首先要看你的name是定义什么以及如何定义的,我之前在SQL Sever中做的实验是定义商场名,这条语句的执行结果会将对应结果按字母顺序排列。至于你的describe我不是很懂
解决方案六:
我们需要注意的一点,如果在返回集字段中,这些字段要么就要包含在Group By语句的后面,作为分组的依据;要么就要被包含在聚合函数中。我们可以将Group By操作想象成如下的一个过程,首先系统根据SELECT 语句得到一个结果集,如最开始的那个水果、出产国家、单价的一个详细表。然后根据分组字段,将具有相同分组字段的记录归并成了一条记录。这个时候剩下的那些不存在于Group By语句后面作为分组依据的字段就有可能出现多个值,但是当前一种分组情况只有一条记录,一个数据格是无法放入多个数值的,所以这里就需要通过一定的处理将这些多值的列转化成单值,然后将其放在对应的数据格中,那么完成这个步骤的就是聚合函数。这就是为什么这些函数叫聚合函数(aggregate functions)了。--百度百科
解决方案七:
会报错 select * from Ad_inf group by name,describe
一般group by 会配合聚合函数 count(--) ,avg(--),sum()
select name.describe, count(_id)from Ad_inf group by name,describe 表示 name,describe一样的有多少人
解决方案八:
会报错 select * from Ad_inf group by name,describe
一般group by 会配合聚合函数 count(--) ,avg(--),sum()
select name.describe, count(_id)from Ad_inf group by name,describe 表示 name,describe一样的有多少人
解决方案九:
结果应该还是现在的顺序,
解决方案十:
如果是用的 mysql 的话会查出 name 和 describe 各自分组后各自所有相同列值的首条记录列表然后合并成一个新个列表
例:
group by name
id name
1 test1
2 test2
5 test3
6 test4
group by describe
id describe
1 d1
2 d2
4 d3
6 d4
合并后为
group by name,describe
1 test1 d1
2 test2 d2
4 test2 d3
5 test3 d2
6 test4 d4