标签: aggregate-functions

带逗号分隔的SQL逗号分隔行

我有以下查询:

SELECT
  Account,
  Unit,
  SUM(state_fee),
  Code
FROM tblMta
WHERE MTA.Id = '123'
GROUP BY Account,Unit
Run Code Online (Sandbox Code Playgroud)

这当然会引发异常,因为代码不在group by条款中.每个state_fee都有一个代码.如何将此代码显示在1条记录中(每个state_fee 1个代码,即每个单元的多个state_fee)作为逗号分隔列表?我在这里查看了不同的解决方案,但我找不到任何有用的解决方案group by.

sql sql-server sql-server-2005 aggregate-functions sql-server-group-concat

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

SqlAlchemy:多个列的明显计数

我做不到:

>>> session.query(
        func.count(distinct(Hit.ip_address, Hit.user_agent)).first()
TypeError: distinct() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)

我可以:

session.query(
        func.count(distinct(func.concat(Hit.ip_address, Hit.user_agent))).first()
Run Code Online (Sandbox Code Playgroud)

哪个没问题('pageload'db表中的唯一用户数).

这在一般情况下是不正确的,例如,对于下表,将给出1而不是2的计数:

 col_a | col_b
----------------
  xx   |  yy
  xxy  |  y
Run Code Online (Sandbox Code Playgroud)

有没有办法生成以下SQL(至少在postgresql中有效)?

SELECT count(distinct (col_a, col_b)) FROM my_table;
Run Code Online (Sandbox Code Playgroud)

postgresql sqlalchemy count distinct aggregate-functions

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

Oracle/SQL - 计算单个列中值的出现次数

好吧,我可能想出一个更好的头衔,但不知道如何说出来让我解释一下.

假设我有一个包含"CODE"列的表格.我的表中的每条记录都有"A","B"或"C",因为它在"CODE"列中的值.我想要的是计算我有多少'A','B'和'C'.

我知道我可以用3个不同的查询完成这个,但我想知道是否有办法只用1来做到这一点.

sql oracle group-by aggregate-functions

13
推荐指数
1
解决办法
5万
查看次数

如何将组内的聚合与SSRS中的组之间的聚合组合在一起

使用此数据集:

Category | Amount
A        | 5
A        | 3
B        | 6
B        | 2
B        | 1
C        | 7
Run Code Online (Sandbox Code Playgroud)

我想在类别上创建一个tablix分组,显示总金额的百分比:

Category | Percentage
A        | 33%
B        | 38%
C        | 29%
Run Code Online (Sandbox Code Playgroud)

这应该是一个简单的计算:

Category | Percentage
A        | ((Sum of Amount within group / Sum of Amount across groups) * 100)%
B        | ((Sum of Amount within group / Sum of Amount across groups) * 100)%
C        | ((Sum of Amount within group / Sum of Amount …
Run Code Online (Sandbox Code Playgroud)

aggregate-functions reporting-services

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

聚合Java中的对象列表

我们在Java中有任何聚合器函数来执行以下聚合吗?

Person {
    String name;
    String subject;
    String department;
    Long mark1;
    Long mark2;
    Long mark3;
}
Run Code Online (Sandbox Code Playgroud)

列表包含如下数据.

Name    |Subject    |Department |Mark1  |Mark2  |Mark3
--------|-----------|-----------|-------|-------|-----
Clark   |English    |DEP1       |7      |8      |6
Michel  |English    |DEP1       |6      |4      |7
Dave    |Maths      |DEP2       |3      |5      |6
Mario   |Maths      |DEP1       |9      |7      |8

聚合标准是Subject&Dep.结果对象需要

Subject     |Department |Mark1  |Mark2  |Mark3
----------- |-----------|-------|-------|-----
English     |DEP1       |13     |12     |13
Maths       |DEP2       |3      |5      |6
Maths       |DEP1       |9      |7      |8

可以通过手动迭代列表并创建聚合列表来实现此聚合.示例如下.

private static List<Person> getGrouped(List<Person> origList) {
    Map<String, Person> …
Run Code Online (Sandbox Code Playgroud)

java aggregate-functions java-8 java-stream

13
推荐指数
2
解决办法
8298
查看次数

为什么在where子句中不允许使用聚合函数

我正在寻求对此的澄清.我在下面写两个问题:

我们有一个员工姓名表,列ID,姓名,薪水

  1.  Select name from employee 
    where sum(salary) > 1000 ;

  2.  Select name from employee 
    where substring_index(name,' ',1) = 'nishant' ;
Run Code Online (Sandbox Code Playgroud)

查询1不起作用,但查询2确实有效.根据我的开发经验,我觉得可能的解释是:

sum()适用于参数中指定的一组值.这里'salary'列被传递,因此它必须将此列的所有值相加.但是在where子句中,记录是逐个检查的,就像检查第一个记录1一样,等等.因此,sum(salary)将不会被计算,因为它需要访问所有列值,然后只返回一个值.

查询2作为substring_index()工作在单个值上,因此它在提供给它的值上工作.

你能否证实我的理解.

sql oracle aggregate-functions

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

使用不同条件从同一个表中的一个SQL查询中的多个聚合函数

我正在创建一个SQL查询,它将根据两个聚合函数的值从表中提取记录.这些聚合函数从同一个表中提取数据,但具有不同的过滤条件.我遇到的问题是SUM的结果比我只包含一个SUM函数要大得多.我知道我可以使用临时表创建此查询,但我只是想知道是否有一个只需要一个查询的优雅解决方案.

我已经创建了一个简化版本来演示这个问题.这是表结构:

EMPLOYEE TABLE

EMPID
1
2
3

ABSENCE TABLE

EMPID   DATE       HOURS_ABSENT
1       6/1/2009   3
1       9/1/2009   1
2       3/1/2010   2
Run Code Online (Sandbox Code Playgroud)

这是查询:

SELECT
    E.EMPID
    ,SUM(ATOTAL.HOURS_ABSENT) AS ABSENT_TOTAL
    ,SUM(AYEAR.HOURS_ABSENT) AS ABSENT_YEAR

FROM
    EMPLOYEE E

    INNER JOIN ABSENCE ATOTAL ON
        ATOTAL.EMPID = E.EMPID

    INNER JOIN ABSENCE AYEAR ON
        AYEAR.EMPID = E.EMPID

WHERE
    AYEAR.DATE > '1/1/2010'

GROUP BY
    E.EMPID

HAVING
    SUM(ATOTAL.HOURS_ABSENT) > 10
    OR SUM(AYEAR.HOURS_ABSENT) > 3
Run Code Online (Sandbox Code Playgroud)

任何见解将不胜感激.

sql t-sql sql-server aggregate-functions

12
推荐指数
2
解决办法
8万
查看次数

两个查询的总和

我有两个基本查询,我需要总结:

Select hours, sum(hours) FROM table WHERE name='xxx' and Description='Worked'
Select hours2, sum(hours2) FROM table WHERE name='xxx' and Description2='Worked'
Run Code Online (Sandbox Code Playgroud)

我已经尝试了UNION,它会得到每个查询的总数,但它不会合并它们.

表格设置是:

  • ID
  • 名称
  • 小时
  • 描述
  • 小时2
  • 内容描述2

我需要将小时与描述和小时2关联到description2,这就是为什么我有两个不同的查询.我需要总计小时和小时2的总和.

mysql sql aggregate-functions

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

在PostgreSQL查询中按降序聚合字符串

除了问题如何通过'查询连接PostgreSQL'组中的字符串字段的字符串?

如何按降序对员工进行排序?

我正在使用不支持的PostgreSQL 8.4 string_agg().我试过使用以下内容,但不支持:

array_to_string(array_agg(employee ORDER BY employee DESC), ',')
Run Code Online (Sandbox Code Playgroud)

我很欣赏任何正确答案的暗示.

sql postgresql aggregate-functions postgresql-8.4

12
推荐指数
1
解决办法
6154
查看次数

Aggregate是否存在致命缺陷,因为每个into子句是单独执行的?

Aggregate当用作具有多个Into子句的Linq表达式的第一个(外部)子句时,VB.NET的查询是否存在致命缺陷,因为每个Into子句是单独执行的?

SELECT MIN(ZoneMin), MAX(ZoneMin) FROM PlantLINQ to SQL中的"明显"答案是

Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
Run Code Online (Sandbox Code Playgroud)

但是,这个答案实际上在单独的 SQL查询中检索每个MinMax(以及如果包括其他聚合函数,如CountAverage).这可以在LINQPad中轻松看到.

是否存在LINQPad未显示的事务(或其他使这些查询成为原子的事件),或者这是一种等待发生的竞争条件?(因此,您必须执行上述问题的答案中显示的技巧,以强制返回多个聚合的单个查询.)

总之,是否使用LINQ-to-SQL查询Aggregate在单个(或至少"原子")查询中返回多个聚合函数?

(我也说"显而易见",因为对我来说显而易见的答案Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin),实际上检索了整个表两次,即使在优化后,然后使用Linq-to-Entities MinMax获得结果:-()

我认为Aggregate不是特定于VB的,但看起来C#没有这个查询表达式,所以我将更改为.

linq vb.net aggregate aggregate-functions linq-to-sql

12
推荐指数
1
解决办法
976
查看次数