SELECT * FROM SMF471 WHERE (ACCOUNT = 'FTP' OR ACCOUNT = 'HINO2') GROUP BY FILENAME, SFNAME, TYPE;这个报错
时间: 2023-12-22 07:04:03 浏览: 33
这个查询语句会报错,因为在 GROUP BY 子句中使用了 FILENAME、SFNAME 和 TYPE 列作为分组依据,但是查询结果中包含了其他未被 GROUP BY 的列,这违反了 SQL 的规则。
在 SQL 中,如果使用了 GROUP BY 子句,那么 SELECT 子句中只能包含 GROUP BY 子句中列名或聚合函数(例如 COUNT、SUM、AVG 等),否则就会报错。
如果您想要按 FILENAME、SFNAME 和 TYPE 列进行分组,并检索出所有字段,可以使用以下查询语句:
```
SELECT *
FROM SMF471
WHERE (ACCOUNT = 'FTP' OR ACCOUNT = 'HINO2')
AND (FILENAME, SFNAME, TYPE) IN (
SELECT FILENAME, SFNAME, TYPE
FROM SMF471
WHERE (ACCOUNT = 'FTP' OR ACCOUNT = 'HINO2')
GROUP BY FILENAME, SFNAME, TYPE
);
```
这个查询使用了子查询来获取所有不同的 FILENAME、SFNAME 和 TYPE 组合,并将它们与原表进行比较,从而获取每个组的所有内容。
相关问题
SELECT FTP_USER,ACCOUNT,IP_ADDR,FILENAME,SFNAME,TYPE,MAX(to_date(FTP_DATE || ' ' || FTP_TIME ,'MM/DD/YYYY hh24:mi:ss')),COUNT(1),AVG(FILE_SIZE) FROM SMF471 where (ACCOUNT = 'FTP' or ACCOUNT = 'HINO2') group by FILENAME,SFNAME,TYPE; 这句为什么不对 怎么改
这个查询语句的问题在于它只按 FILENAME、SFNAME 和 TYPE 列进行了分组,而没有包含 FTP_USER、ACCOUNT 和 IP_ADDR 列,因此查询结果将会模糊不清,无法确定每个组的 FTP_USER、ACCOUNT 和 IP_ADDR 值。
如果您想要包含 FTP_USER、ACCOUNT 和 IP_ADDR 字段作为分组依据,可以将查询语句修改为:
```
SELECT FTP_USER, ACCOUNT, IP_ADDR, FILENAME, SFNAME, TYPE, MAX(to_date(FTP_DATE || ' ' || FTP_TIME ,'MM/DD/YYYY hh24:mi:ss')), COUNT(1), AVG(FILE_SIZE)
FROM SMF471
WHERE (ACCOUNT = 'FTP' OR ACCOUNT = 'HINO2')
GROUP BY FTP_USER, ACCOUNT, IP_ADDR, FILENAME, SFNAME, TYPE;
```
这个查询会按 FTP_USER、ACCOUNT、IP_ADDR、FILENAME、SFNAME 和 TYPE 列进行分组,并计算每个组的最大日期时间、行数和文件大小平均值。
SELECT FTP_USER,ACCOUNT,IP_ADDR,FILENAME,SFNAME,TYPE,MAX(to_date(FTP_DATE || ' ' || FTP_TIME ,'MM/DD/YYYY hh24:mi:ss')),COUNT(1),AVG(FILE_SIZE) FROM SMF471 where (ACCOUNT = 'FTP' or ACCOUNT = 'HINO2') group by FTP_USER,ACCOUNT,IP_ADDR,FILENAME,SFNAME,TYPE;
这个查询语句按 FTP_USER、ACCOUNT、IP_ADDR、FILENAME、SFNAME 和 TYPE 列进行分组,并计算每个组的最大日期时间、行数和文件大小平均值,同时只筛选出 ACCOUNT 字段值为 'FTP' 或 'HINO2' 的记录。
如果您想要更改分组依据,可以将 GROUP BY 子句中的列名进行修改。如果您想要检索出所有字段而不是仅仅包括 SELECT 子句中的字段,可以使用通配符 * 来代替 SELECT 子句中的字段名。
例如,如果您想要按 FILENAME、SFNAME 和 TYPE 列进行分组,并检索出每个组的所有字段,可以使用以下查询语句:
```
SELECT *
FROM SMF471
WHERE (ACCOUNT = 'FTP' OR ACCOUNT = 'HINO2')
GROUP BY FILENAME, SFNAME, TYPE;
```
这个查询会按 FILENAME、SFNAME 和 TYPE 列进行分组,同时检索出每个组的所有字段。它使用了通配符 * 来代替 SELECT 子句中的字段名,从而检索出所有字段。