SQL语句select * from 表名 group by 列名--不是 GROUP BY 表达式

2024-12-15 23:57:19
推荐回答(4个)
回答1:

这个问题是解析的时候Oracle不知道select num from table_number where dwdm='111' and rownum<=1 是唯一啊,他按照语法解析而已。

可以换成以下的:

SELECT ((SELECT num          FROM table_number         WHERE dwdm = '111'           AND rownum <= 1) -       (SELECT SUM(ds)          FROM table_data         WHERE dwdm = '111'           AND rq >= to_date('2015-01-01', 'yyyy-mm-dd'))) /       (to_date('2015-4-16', 'yyyy-mm-dd') - to_date('2015-01-01', 'yyyy-mm-dd') + 1)  FROM dual;

电脑蓝屏又叫蓝屏死机,指的是微软Windows操作系统在无法从一个系统错误中恢复过来时所显示的屏幕图像。

***STOP 0x0000001E(0xC0000005,0xFDE38AF9,0x0000001,0x7E8B0EB4) KMODE_EXCEPTION_NOT_HANDLED ***

其中错误的第一部分是停机码(Stop Code)也就是STOP 0x0000001E,用于识别已发生错误的类型, 错误第二部分是被括号括起来的四个数字集,表示随机的开发人员定义的参数,第三部分是错误名。

信息第一行通常用来识别生产错误的驱动程序或者设备,这种信息多数很简洁,但停机码可以作为搜索项在微软知识库和其他技术资料中使用。

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。

各种不同的数据库对SQL语言的支持与标准存在着细微的不同,这是因为,有的产品的开发先于标准的公布,另外,各产品开发商为了达到特殊的性能或新的特性,需要对标准进行扩展。已有100多种遍布在从微机到大型机上的数据库产品SQL,其中包括DB2、SQL/DS、ORACLE、INGRES、SYBASE、SQLSERVER、DBASEⅣ、PARADOX、MICROSOFTACCESS等。

SQL语言基本上独立于数据库本身、使用的机器、网络、操作系统,基于SQL的DBMS产品可以运行在从个人机、工作站到基于局域网、小型机和大型机的各种计算机系统上,具有良好的可移植性。可以看出标准化的工作是很有意义的。早在1987年就有些有识之士预测SQL的标准化是“一场革命”,是“关系数据库管理系统的转折点”。数据库和各种产品都使用SQL作为共同的数据存取语言和标准的接口,使不同数据库系统之间的互操作有了共同的基础,进而实现异构机、各种操作环境的共享与移植。

1974年,在IBM公司圣约瑟研究实验室研制的大型关系数据库管理系统SYSTEM R 中,使用SEQUEL语言(由BOYCE 和CHAMBERLIN 提出),后来在SEQUEL 的基础上发展了SQL 语言。 SQL语言是一种交互式查询语言,允许用户直接查询存储数据,但它不是完整的程序语言,如它没有DO或FOR 类似的循环语句,但它可以嵌入到另一种语言中,也可以借用VB、C、JAVA等语言,通过调用级接口(CALL LEVEL INTERFACE)直接发送到数据库管理系统。SQL基本上是域关系演算,但可以实现关系代数操作。

回答2:

select * from 表名 group by 列名

这个语句是错误的,group by 语句不用用和*搭配的,除非你查询的所有列都包含在GROUP BY语句汇总,解决的办法就是,把*换成具体的列名,并且列表必须包含统计函数(max,min,count等)。

例如 学生表(学号,姓名,性别,年龄)

SELECT MAX(学号),MAX(姓名),性别,MAX(年龄)
FROM 学生表
GROUP BY 性别

回答3:

* 中,含有不能通过分组进行组合的字段。
举个例子说:
emp表:
empno ename dept_id
1 tony 1
2 jack 1

使用select * from emp e group by e.dept_id;
dept_id虽可进行分组组合,但是empno,ename不能进行组合。

回答4:

group by 的意思为分组汇总。
使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。

比如,有:{学号,姓名,性别,年龄,成绩}字段

这样写:
SELECT 学号,姓名,性别,年龄,sum(成绩)
FROM 学生表
GROUP BY 学号
就是错的,因为 “姓名、性别、年龄”未被汇总,且不一定是单一。

这样写:
SELECT MAX(学号),MAX(姓名),MAX(性别),MAX(年龄),sum(成绩)
FROM 学生表
GROUP BY 学号
是对的,汇总出每一同学号学生的总成绩。注意的是,只要学号相同,别的如果有不同,取它们值最大的一条作为显示输出。

这样写:
SELECT 学号,姓名,性别,年龄,sum(成绩)
FROM 学生表
GROUP BY 学号,姓名,性别,年龄
这样写也是对的,但注意的是,学号,姓名,性别,年龄中,只要有一个不同,就会当成另一条记录来汇总。

以上仅记忆,可能有错,自个去理解测试,说错请原谅,我也是在学习中。