标签: aggregate-functions

Easy SQL Group-问题.(我是新来的)

我是SQL的新手,所以希望这有一个简单的答案.

我有一个学生表(studentID,name,statusID)和StudentsClasses表(studentID,classID).我被要求从上面的表中创建一个返回以下列的视图:

classID :(分组)

每个班级的学生数量AS学生

statusID = 1作为活动的学生数

statusID = 2的学生数量为非活动人数

我可以轻松地按classID colunm分组并计算学生数量,但我不认为count函数可以被告知只计算某些行.一旦我添加where或having子句,我就会丢失记录,我需要在其他列中计算.我是否需要编写几个不同的查询然后加入每个查询的结果?

感谢您的任何帮助,您可以提供!

-大卫

sql group-by aggregate-functions

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

使用有关先前行的计算更新SQL表

我正在尝试修复一个大型股票交易所数据库的错误.一列(数量)在每个刻度上具有交易量,而其他列存储累积量(即,当天的先前刻度的总和).在某些情况下,这第二列是错误的(不是很多,所以我们可以安全地假设相邻的刻度线没有错误).因此理论上修复很容易:只需搜索累积量减少的刻度(这就足够了),然后从最后一个刻度中选择累积量并将当前刻度的数量相加.问题是我一直在努力开始在oracle中执行此操作的查询,但由于我缺乏sql的专业知识,我正在努力.这是我到目前为止所获得的:

update
( 
    select m.cumulative_volume, q.cum_volume_ant, q.quantity from 
    market_data_intraday_trades m
    join
    (
          select * from
          (select
            product_key,
            sequence_number,
            lead(product_key) over (order by product_key, sequence_number) as product_key_ant,
            to_char(trade_date_time, 'yyyymmdd') as fecha,
            to_char(lag(trade_date_time) over (order by product_key, sequence_number), 'yyyymmdd') as fecha_ant,
            cumulative_volume,
            lead(cumulative_volume) over (order by product_key, sequence_number) as cum_volume_ant,
            cumulative_volume - lead(cumulative_volume) over (order by product_key, sequence_number) as dif 
          from market_data_intraday_trades)
          where product_key = product_key_ant
          and fecha = fecha_ant
          and dif < 0 
          and rownum < 10
    ) q
    on m.sequence_number …
Run Code Online (Sandbox Code Playgroud)

sql oracle join aggregate-functions sql-update

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

分组时如何与条件求和

我有一个行列表,我想在分组(一种COUNT)时对行数进行求和,但仅在每行时,字段customField = 0.

示例:

title       customField
aaa         1
aaa         0
bbb         0
ccc         1
bbb         1
aaa         0
Run Code Online (Sandbox Code Playgroud)

所以,输出应该是:

aaa 2
bbb 1
ccc 0
Run Code Online (Sandbox Code Playgroud)

我怎么能用MySql做到这一点?

编辑

实际上我真正的查询是这样的:

SELECT forum_categories.title, COUNT(forum_topics.id) AS total_topics, COUNT(forum_messages.id) AS total_replies, MAX(forum_messages.date) AS last_message
FROM forum_categories
JOIN forum_topics ON forum_topics.category_id = forum_categories.id 
JOIN forum_messages ON forum_messages.topic_id = forum_topics.id
GROUP BY forum_categories.id ORDER BY forum_categories.date
Run Code Online (Sandbox Code Playgroud)

而且我必须COUNT(forum_messages.id) AS total_replies只计算forum_messages.original=0,这就是为什么我要求SUM :)

mysql sql aggregate-functions

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

如何在不使用`GROUP BY`的情况下进行聚合?

我有如下查询

SELECT a.*, b.*

(SELECT ATTR1, ATTR2, sum(QUANTITY) AS TOTAL_QTY,
ATTR3 FROM TABLE_A
WHERE ATTR4 > 0
GROUP BY ATTR1, ATTR2, ATTR3) a,

TABLE_B b

WHERE a.ATTR1 = b.ATTR1
AND a.ATTR2 = b.ATTR2
Run Code Online (Sandbox Code Playgroud)

GROUP BYATTR1需要计算正确的TOTAL_QTY,但唯一的原因是我将其他属性分组,因为Oracle要求if GROUP BY子句存在,那么所有SELECT属性也应该在GROUP BY子句中.

这意味着每次我需要Table_A中的此查询中的属性时,我也需要将其放入GROUP BY.这不仅看起来很丑陋,而且可能会产生性能影响,也许会产生不可预见的副作用.

如何TOTAL_QTYATTR1没有GROUP BY子句的情况下重写上面的查询来计算每个组?

sql oracle group-by aggregate-functions

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

使用子查询的WHERE中的相同表更新子查询

我在表"user"中有2个整数字段:leg_count和leg_length.第一个存储用户的腿数,第二个存储它们的总长度.

属于用户的每条腿存储在单独的表中,只要典型的互联网用户可以有零到无限的腿:

CREATE TABLE legs (
    user_id int not null,
    length  int not null
);
Run Code Online (Sandbox Code Playgroud)

我想在一个查询中重新计算所有用户的统计信息,所以我尝试:

UPDATE users SET
    leg_count = subquery.count, leg_length = subquery.length
FROM (
    SELECT COUNT(*) as count, SUM(length) as length FROM legs WHERE legs.user_id = users.id
) AS subquery;
Run Code Online (Sandbox Code Playgroud)

并获取"FROM中的子查询不能引用相同查询级别的其他关系"错误.

所以我必须这样做

UPDATE users SET
    leg_count =  (SELECT COUNT(*)    FROM legs WHERE legs.user_id = users.id),
    leg_length = (SELECT SUM(length) FROM legs WHERE legs.user_id = users.id)
Run Code Online (Sandbox Code Playgroud)

是什么让数据库为每一行执行2个SELECT,但是,所需的数据可以在一个SELECT中计算:

SELECT COUNT(*), SUM(length) FROM legs;
Run Code Online (Sandbox Code Playgroud)

是否可以优化我的UPDATE查询以仅使用一个SELECT子查询?

我使用PostgreSQL,但我相信,任何SQL方言都存在解决方案.

TIA.

sql count aggregate-functions sql-update

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

选择按5分钟周期分组的记录的平均值

我有一个小问题.我有一个这种格式的PostgreSQL表

time (datetime)     | players (int) | servers (int)
---------------------------------------------------
2013-12-06 13:40:01 | 80            | 20
2013-12-06 13:41:13 | 78            | 21
etc.
Run Code Online (Sandbox Code Playgroud)

我想将它们分组为5分钟,并将该组的平均值作为单个值,因此将有20%的记录,每个记录包含平均~5个数字,时间设置为第一次的值群组.我不知道如何在PgSQL中做到这一点.结果将是:

2013-12-06 13:40:01 | avg of players on :40, :41, :42, :43, :44 | same with servers
2013-12-06 13:45:05 | avg of players on :45, :46, :47, :48, :49 | same with servers
2013-12-06 13:50:09 | avg of players on :50, :51, :52, :53, :54 | same with servers
2013-12-06 13:55:12 | avg of players on :55, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql timestamp aggregate-functions generate-series

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

SQL返回Distinct列和distinct列的第一个日期

我有一个包含多个数据库的数据库url和一个created_at与这些数据库相关联的date()url.
我希望有类似的东西:

Select DISTINCT url, "the first date of this url"
from database
where blabala
Run Code Online (Sandbox Code Playgroud)

我的问题是当一个日期添加到选择我得到这个:

/url/sdfsd  |   2014-07-19  
/url/sdfsd  |   2014-07-20  
/url/sdfsd  |   2014-07-25  
Run Code Online (Sandbox Code Playgroud)

而我想要的只是:

/url/sdfsd  |   2014-07-19
Run Code Online (Sandbox Code Playgroud)

我意识到我过度简化了我的问题,但多亏了你们,我设法找到了解决方案

select req2.date, COUNT(DATE(req2.date)) as count
from (
    select hash_request -> 'PATH_INFO', min(DATE(created_at)) as date
        from (
            select *
            from request_statistics
            where LOWER(hash_request -> 'HTTP_USER_AGENT') LIKE '%google%'
         ) req1
    group by hash_request -> 'PATH_INFO'
     )  req2
group by req2.date
order by req2.date asc
Run Code Online (Sandbox Code Playgroud)

我很难将所有独特网址上的日期分组.现在我有,每天所有独特网址的唯一网址数量

sql postgresql aggregate-functions greatest-n-per-group

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

计算和聚合两行

假设我有一个如下表:

id  | key           | user_id | value
---------------------------------------
8   | bp_diastolic  | 1       | 93.0
7   | bp_systolic   | 1       | 128.0
20  | bp_systolic   | 2       | 108.0
21  | bp_diastolic  | 2       | 76.0
35  | bp_diastolic  | 3       | 113.0
34  | bp_systolic   | 3       | 101.0
48  | bp_systolic   | 4       | 115.0
49  | bp_diastolic  | 4       | 77.0
62  | bp_systolic   | 5       | 143.0
63  | bp_diastolic  | 5       | 104.0
77 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions

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

每个密钥的聚合RDD值

我在密钥,值结构中有RDD(someKey,(measure1,measure2)).我按键分组,现在我想聚合每个键的值.

val RDD1 : RDD[(String,(Int,Int))]
RDD1.groupByKey()
Run Code Online (Sandbox Code Playgroud)

我需要的结果是:

key: avg(measure1), avg(measure2), max(measure1), max(measure2), min(measure1), min(measure2), count(*)
Run Code Online (Sandbox Code Playgroud)

scala aggregate-functions apache-spark rdd

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

Postgres中的Array_agg选择性引用

我有一个复杂的数据库,其中的键和值存储在不同的表中。当为应用程序提取值时,对它们进行汇总很有用:

   SELECT array_agg(key_name), array_agg(vals)
                    FROM (
                        SELECT
                            id,
                            key_name,
                            array_agg(value)::VARCHAR(255) AS vals
                        FROM factor_key_values
                        WHERE id=20
                        GROUP BY key_name, id
                    ) f;
Run Code Online (Sandbox Code Playgroud)

在我的情况下,此特定查询给出以下无效的JSON:

-[ RECORD 1 ]-----------------------------------------------------------------------  
array_agg | {"comparison method","field score","field value"} 
array_agg | {"{\"text category\"}","{100,70,50,0,30}","{A,B,C,F,\"No Experience\"}"}
Run Code Online (Sandbox Code Playgroud)

请注意,仅在字符串包含空格的情况下才引用varchars数组。我将其范围缩小到的行为ARRAY_AGG。为了完整起见,下面是一个示例:

BEGIN;
CREATE TABLE test (txt VARCHAR(255));
INSERT INTO test(txt) VALUES ('one'),('two'),('three'), ('four five');
SELECT array_agg(txt) FROM test;
Run Code Online (Sandbox Code Playgroud)

结果将是:

{one,two,three,"four five"}
Run Code Online (Sandbox Code Playgroud)

这就是为什么我的JSON损坏的原因。我可以处理应用程序代码中未加引号或字符串的字符串,但有一些混淆。

有什么解决办法吗?

arrays postgresql json aggregate-functions

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