标签: aggregate-functions

为什么不能在单个SELECT中混合聚合值和非聚合值?

我知道如果在SELECT语句中有一个聚合函数,那么语句中的所有其他值必须是聚合函数,或者在GROUP BY子句中列出.我不明白为什么会这样.

如果我做:

SELECT Name, 'Jones' AS Surname FROM People
Run Code Online (Sandbox Code Playgroud)

我明白了:

NAME    SURNAME
Dave    Jones
Susan   Jones
Amy     Jones
Run Code Online (Sandbox Code Playgroud)

因此,DBMS从每一行获取一个值,并在结果集中为其附加一个值.没关系.但如果可行的话,我为什么不能这样做:

SELECT Name, COUNT(Name) AS Surname FROM People
Run Code Online (Sandbox Code Playgroud)

看起来是一样的想法,从每一行中取一个值并附加一个值.而不是:

NAME    SURNAME
Dave    3
Susan   3
Amy     3    
Run Code Online (Sandbox Code Playgroud)

我明白了:

您尝试执行不包含指定表达式"ContactName"的查询作为聚合函数的一部分.

我知道这是不允许的,但这两种情况看起来很相似,我不明白为什么.是否使DBMS更容易实现?如果有人能向我解释为什么它不能像我认为的那样起作用,我将非常感激.

sql aggregate-functions

20
推荐指数
3
解决办法
4万
查看次数

post_SQL中的date_trunc 5分钟间隔

可能重复:
在Postgres中将时间戳截断为5分钟的最快方法是什么?
Postgresql SQL GROUP BY时间间隔,任意精度(低至毫秒)

我想在PostgreSQL中以5分钟的间隔聚合数据.如果我使用该date_trunc()功能,我可以按小时,每月,每日,每周等间隔汇总数据,但不是5分钟或5天等特定间隔.

select date_trunc('hour', date1), count(*) from table1 group by 1;
Run Code Online (Sandbox Code Playgroud)

有谁知道我们如何在PostgreSQL中实现这一目标?

任何帮助表示赞赏.

sql postgresql datetime aggregate-functions

20
推荐指数
2
解决办法
3万
查看次数

Oracle SQL - 按周计算总和和组数据

我有与日期有关的记录:

DATE         AMOUNT
16.03.2013   3
16.03.2013   4
16.03.2013   1
16.03.2013   3
17.03.2013   4
17.03.2014   3
Run Code Online (Sandbox Code Playgroud)

我知道如何总结每一天,但我怎么能在一周之前总结一下呢?

sql oracle aggregate-functions

20
推荐指数
2
解决办法
4万
查看次数

SQL查询在SQL Server中以逗号分隔符的形式获取聚合结果

我需要在表上编写一个sql查询,以便结果将具有group by列以及带有逗号分隔符的聚合列.

我的表格将采用以下格式

   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |   a    |
   |_________|________|
   |    1    |   b    |
   |_________|________|
   |    2    |   c    |
   |_________|________|
Run Code Online (Sandbox Code Playgroud)

预期结果应采用以下格式

   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |  a,b   |
   |_________|________|
   |    2    |   c    |
   |_________|________|
Run Code Online (Sandbox Code Playgroud)

sql sql-server select aggregate-functions sql-server-group-concat

19
推荐指数
1
解决办法
6485
查看次数

为什么PostgreSQL数组在C中的访问速度比在PL/pgSQL中快得多?

我有一个表模式,其中包含一个int数组列,以及一个自定义聚合函数,它对数组内容求和.换句话说,给出以下内容:

CREATE TABLE foo (stuff INT[]);

INSERT INTO foo VALUES ({ 1, 2, 3 });
INSERT INTO foo VALUES ({ 4, 5, 6 });
Run Code Online (Sandbox Code Playgroud)

我需要一个可以返回的"sum"函数{ 5, 7, 9 }.正确运行的PL/pgSQL版本如下:

CREATE OR REPLACE FUNCTION array_add(array1 int[], array2 int[]) RETURNS int[] AS $$
DECLARE
    result int[] := ARRAY[]::integer[];
    l int;
BEGIN
  ---
  --- First check if either input is NULL, and return the other if it is
  ---
  IF array1 IS NULL OR array1 = '{}' THEN
    RETURN array2;
  ELSEIF …
Run Code Online (Sandbox Code Playgroud)

c arrays postgresql plpgsql aggregate-functions

19
推荐指数
2
解决办法
3616
查看次数

在SQL中返回JSON对象数组(Postgres)

我有下表MyTable:

 id ? value_two ? value_three ? value_four 
???????????????????????????????????????????
  1 ? a         ? A           ? AA
  2 ? a         ? A2          ? AA2
  3 ? b         ? A3          ? AA3
  4 ? a         ? A4          ? AA4
  5 ? b         ? A5          ? AA5
Run Code Online (Sandbox Code Playgroud)

我想查询{ value_three, value_four }按组分组的对象数组value_two.value_two应该在结果中独立存在.结果应如下所示:

 value_two ?                                                                                    value_four                                                                                 
???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
 a         ? [{"value_three":"A","value_four":"AA"}, {"value_three":"A2","value_four":"AA2"}, {"value_three":"A4","value_four":"AA4"}]
 b         ? [{"value_three":"A3","value_four":"AA3"}, {"value_three":"A5","value_four":"AA5"}]
Run Code Online (Sandbox Code Playgroud)

它是否使用json_agg()或无关紧要array_agg().

然而,我能做的最好的事情是:

with MyCTE as ( select …
Run Code Online (Sandbox Code Playgroud)

sql arrays postgresql json aggregate-functions

19
推荐指数
1
解决办法
2万
查看次数

是否可以执行按位组功能?

我在一个包含按位标志的表中有一个字段.让我们说为了示例,有三个标志:4 => read, 2 => write, 1 => execute表格如下所示*:

  user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)
Run Code Online (Sandbox Code Playgroud)

我有兴趣找到在任何记录上设置了特定标志(例如:写入)的所有用户.要在一个查询中执行此操作,我认为如果您将所有用户的权限合并在一起,您将获得一个值,即其权限的"总和":

  user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- …
Run Code Online (Sandbox Code Playgroud)

mysql sql oracle group-by aggregate-functions

18
推荐指数
2
解决办法
6279
查看次数

SQL Server的分组字符串聚合/ LISTAGG

我确信这已经被问到了,但我找不到合适的搜索条件.

给定这样的架构:

| CarMakeID | CarMake
------------------------
|         1 | SuperCars
|         2 | MehCars

| CarMakeID | CarModelID | CarModel
-----------------------------------------
|         1 |          1 | Zoom
|         2 |          1 | Wow
|         3 |          1 | Awesome
|         4 |          2 | Mediocrity
|         5 |          2 | YoureSettling
Run Code Online (Sandbox Code Playgroud)

我想生成这样的数据集:

| CarMakeID | CarMake   | CarModels
---------------------------------------------
|         1 | SuperCars | Zoom, Wow, Awesome
|         2 | MehCars   | Mediocrity, YoureSettling
Run Code Online (Sandbox Code Playgroud)

在以下样式查询中,我该怎么做以代替SQL Server中的字符串'AGG'?

SELECT *, 
 (SELECT …
Run Code Online (Sandbox Code Playgroud)

sql sql-server aggregate-functions

18
推荐指数
2
解决办法
4万
查看次数

如何在Postgres中分组并返回sum行

我被困在这里.我在Postgres中有这样的排:

id      amount
a       5000
a       1500
a       500
b       2000
b       1000
c       4000
Run Code Online (Sandbox Code Playgroud)

sql语法如何获得这样的结果?

id      amount
a       7000
b       3000
c       4000
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions

18
推荐指数
1
解决办法
3万
查看次数

从分组列中重复采样的最佳性能

这个问题是关于first_value()使用其他功能或解决方法的功能.

它也是关于大表中"性能上的微不足道".使用例如.max()在下面解释的上下文中,要求虚假比较.即使速度很快,也会产生一些额外的成本.


这种典型的查询

SELECT x, y, count(*) as n 
FROM t 
GROUP BY x, y;
Run Code Online (Sandbox Code Playgroud)

需要重复所有列GROUP BY以返回多个列.执行此操作的语法糖是使用位置引用:

SELECT x, y, count(*) as n 
FROM t 
GROUP BY x, 2  -- imagine that 2, 3, etc. are repeated with x
Run Code Online (Sandbox Code Playgroud)

有时不仅需要糖,还需要一些语义来理解复杂的上下文:

SELECT x, COALESCE(y,z), count(*) as n 
FROM t 
GROUP BY x, y, z  -- y and z are not "real need" grouping clauses?
Run Code Online (Sandbox Code Playgroud)

我可以想象许多其他复杂的背景.让我们看看通常的解决方案:

SELECT x, max(y) as y, count(*) as n 
FROM t …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions postgresql-performance

16
推荐指数
2
解决办法
297
查看次数