Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLite查询在版本3.4.2中成功运行,但在版本3.7.11中出现错误-使用聚合函数_Sqlite_Aggregate Functions - Fatal编程技术网

SQLite查询在版本3.4.2中成功运行,但在版本3.7.11中出现错误-使用聚合函数

SQLite查询在版本3.4.2中成功运行,但在版本3.7.11中出现错误-使用聚合函数,sqlite,aggregate-functions,Sqlite,Aggregate Functions,我有一个问题: SELECT MIN(stat_md5) AS stat_md5 FROM (select * from ( mem_stat NATURAL LEFT OUTER JOIN host )) GROUP BY stat_md5; 此查询在SQLite版本3.4.2中运行良好,但当我升级到版本3.7.11时,出现以下错误: SQL error: aggregate functions are not allowed in the GROUP BY clause 如

我有一个问题:

SELECT MIN(stat_md5) AS stat_md5 
FROM 
     (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))
GROUP BY stat_md5;
此查询在SQLite版本
3.4.2
中运行良好,但当我升级到版本
3.7.11
时,出现以下错误:

SQL error: aggregate functions are not allowed in the GROUP BY clause
如果我从查询中删除
MIN()
groupby
AS
,则其在版本
3.7.11
中工作正常

这意味着以下查询变体工作正常:

SELECT MIN(stat_md5) AS stat_md5 
FROM 
     (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))


SELECT MIN(stat_md5) 
FROM 
     (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))
GROUP BY stat_md5;


SELECT stat_md5 
FROM 
     (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))
GROUP BY stat_md5;
有人能解释一下为什么在3.7.11版本中会出现错误以及解决方法吗

更新日期:

这是原始查询

SELECT 
      stat_day, obs_day, stat_week, obs_week, 
      NULL AS stat_cputotal, stat_memfree, stat_md5,
      stat_month, obs_month, stat_type, stat_memused, stat_10min, obs_10min, 
      NULL AS stat_cpusystem, stat_epoch, obs_epoch, stat_30day, obs_30day, 
      stat_idx, obs_idx, NULL AS stat_cpuidle, stat_memtotal, stat_qtr, obs_qtr,
      NULL AS stat_cpuuser, stat_hour, obs_hour, obs_10min, stat_10min, 
      obs_30day,stat_30day, obs_day, stat_day, obs_epoch, stat_epoch, obs_hour,
      stat_hour, obs_idx, stat_idx, obs_month, stat_month, obs_qtr, stat_qtr, 
      obs_week, stat_week, serial_num, NULL AS dputil_cpuid, NULL AS wms_pk 
      FROM (
       (
       SELECT stat_qtr, obs_qtr, stat_qtr AS cus_qtr, stat_qtr AS crash_qtr, 
              stat_qtr AS evt_qtr, stat_30day, obs_30day, stat_30day AS cus_30day, 
              stat_30day AS crash_30day, stat_30day AS evt_30day, stat_month, 
              obs_month, stat_month AS cus_month, stat_month AS crash_month, 
              stat_month AS evt_month, stat_week, obs_week, stat_week AS cus_week, 
              stat_week AS crash_week, stat_week AS evt_week, stat_day, obs_day, 
              stat_day AS cus_day, stat_day AS crash_day, stat_day AS evt_day, 
              stat_hour, obs_hour, stat_hour AS cus_hour, stat_hour AS crash_hour, 
              stat_hour AS evt_hour, stat_10min, obs_10min, stat_10min AS cus_10min, 
              stat_10min AS crash_10min, stat_10min AS evt_10min, stat_epoch, 
              obs_epoch, stat_epoch AS cus_epoch, stat_epoch AS crash_epoch, 
              stat_epoch AS evt_epoch, stat_idx, obs_idx, stat_idx AS cus_idx, 
              stat_idx AS crash_idx, stat_idx AS evt_idx, obs_10min, obs_30day, 
              obs_day, obs_epoch, obs_hour, obs_idx, obs_month, obs_qtr, obs_week, 
              serial_num, stat_md5, MIN(stat_memfree) AS stat_memfree, MIN(stat_md5) 
              AS stat_md5, MIN(stat_type) AS stat_type, MIN(stat_memused) AS 
              stat_memused, MIN(stat_memtotal) AS stat_memtotal 
              FROM 
                   (select * from ( mem_stat NATURAL LEFT OUTER JOIN host )) 
                    GROUP BY 
                            stat_qtr, stat_30day, stat_month, stat_week, 
                            stat_day, stat_hour, stat_10min, stat_epoch, 
                            stat_idx, obs_10min,obs_30day, obs_day, obs_epoch, 
                            obs_hour, obs_idx, obs_month, obs_qtr, obs_week, 
                            serial_num, stat_md5
                   ))
,stat_md5,MIN(stat_memfree)作为stat_memfree,MIN(stat_md5)作为stat_md5

stat_md5在选择列表中有两次:一次是单独的,一次是作为MIN()的别名。3.4.2必须使用第一个,3.7.11必须使用第二个

按聚合字段分组没有意义,因此错误是正确的

只需将第二次的别名更改为minu stat_md5之类的
,它就可以正常工作了。在SELECT上有两个同名字段在任何情况下都不是好主意

,stat_md5,MIN(stat_memfree)作为stat_memfree,MIN(stat_md5)作为stat_md5

stat_md5在选择列表中有两次:一次是单独的,一次是作为MIN()的别名。3.4.2必须使用第一个,3.7.11必须使用第二个

按聚合字段分组没有意义,因此错误是正确的


只需将第二次的别名更改为minu stat_md5之类的
,它就可以正常工作了。在任何情况下,在SELECT上使用两个同名字段都是一个坏主意。

在我看来,这个内联视图中的括号很奇怪:

       (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))  
此外,在IMO中,为了查询的清晰性和可读性,最好为内联视图指定一个别名:

      select Books4Kids.Price
      from
      (
       select authors.name, titles.price
       from authors inner join titles on authors.authorid = titles.authorid
       where titles.category = 'Childrens Literature'
      ) as Books4Kids

在我看来,这个内联视图中的括号很时髦:

       (select * from ( mem_stat NATURAL LEFT OUTER JOIN host ))  
此外,在IMO中,为了查询的清晰性和可读性,最好为内联视图指定一个别名:

      select Books4Kids.Price
      from
      (
       select authors.name, titles.price
       from authors inner join titles on authors.authorid = titles.authorid
       where titles.category = 'Childrens Literature'
      ) as Books4Kids

我不明白你为什么一开始就按照已经分组的字段分组。我将保留MIN()并完全丢弃GROUPBY子句,这将给您相同的结果resultset@Einacio这个查询有点大,我只是把它缩小到给出错误的部分。@Einacio我已经用原始查询更新了这个问题。无论如何,查询在版本
3.4.2
中运行良好。我想了解为什么它在
3.7.11
中不起作用,我不明白为什么您首先要按已分组的字段分组。我将保留MIN()并完全丢弃GROUPBY子句,这将给您相同的结果resultset@Einacio这个查询有点大,我只是把它缩小到给出错误的部分。@Einacio我已经用原始查询更新了这个问题。无论如何,查询在版本
3.4.2
中运行良好。我想了解为什么它在
3.7.11