标签: aggregate-functions

MySQL与Count不同的记录

我有一张照片表,该表中有两列名为"id"和"user_id".显然,一个用户可以拥有许多照片.我想运行一个查询,可以为每个用户提供照片计数.

任何帮助表示赞赏.

mysql sql aggregate-functions

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

SQL查询同时获取group by和distinct值

我在尝试为此表定义SQL查询时遇到问题:

在访问时记录患者及其体重读数表,其中包含以下列:

  • 病人身份证
  • 体重阅读
  • 访问ID(每次访问一次)

换句话说,如果在两个记录中两个访问ID相同,则在同一访问日期已经进行了两次重量读数.

我有这个问题"让所有患者至少有两个重量读数超过150":

select patient_id 
  from patients 
 where weight_val > 50 
group by patient_id 
  having count(*) >= 2
Run Code Online (Sandbox Code Playgroud)

这是我的问题:如果我想修改此查询以便我可以查询以下内容:

  1. "让所有患者在不同的就诊时至少有两个重量读数超过150"
  2. "让所有患者在同一次就诊时至少有两个重量读数超过150的患者"

是否可以在不删除"分组依据"声明的情况下执行此操作?如果没有,你推荐的方法是什么?如果它更容易(我正在使用Oracle),我也愿意添加日期列而不是访问ID.

sql oracle plsql aggregate-functions

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

包内的自定义聚合函数

我正在尝试在Oracle中编写一个自定义聚合函数,并将该函数与一些其他函数组合在一起.作为一个例子(模拟我的问题)假设我的自定义聚合做数字的总和看起来像:

CREATE OR REPLACE TYPE SUM_AGGREGATOR_TYPE AS OBJECT (
    summation NUMBER,

    STATIC FUNCTION ODCIAggregateInitialize(agg_context IN OUT
       SUM_AGGREGATOR_TYPE) RETURN NUMBER,

    MEMBER FUNCTION ODCIAggregateIterate(self IN OUT SUM_AGGREGATOR_TYPE,
        next_number IN NUMBER) RETURN NUMBER,

    MEMBER FUNCTION ODCIAggregateMerge(self IN OUT SUM_AGGREGATOR_TYPE,
        para_context IN SUM_AGGREGATOR_TYPE) RETURN NUMBER,

    MEMBER FUNCTION ODCIAggregateTerminate(self IN SUM_AGGREGATOR_TYPE,
        return_value OUT NUMBER, flags IN NUMBER) RETURN NUMBER
);
Run Code Online (Sandbox Code Playgroud)
CREATE OR REPLACE TYPE BODY SUM_AGGREGATOR_TYPE IS

  STATIC FUNCTION ODCIAggregateInitialize(agg_context IN OUT
    SUM_AGGREGATOR_TYPE)
      RETURN NUMBER IS
  BEGIN
    agg_context := SUM_AGGREGATOR_TYPE(NULL);
    RETURN ODCIConst.Success;
  END;


  MEMBER FUNCTION …
Run Code Online (Sandbox Code Playgroud)

sql oracle aggregate-functions oracle11g ora-00600

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

SQLite计数示例

我在Android中使用SQLite.我有查询,执行查询以及如何从游标打印计数.

Cursor dataCount = mDb.rawQuery("select count(*) from " + DATABASE_JOURNAL_TABLE, null);
Run Code Online (Sandbox Code Playgroud)

我没有表中的记录.

sql sqlite android aggregate-functions

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

计算包含字母/数字的行数

我想要实现的是直截了当的,但是它有点难以解释,我不知道它是否实际上甚至可能在postgres中.我处于相当基础的水平.SELECT, FROM, WHERE, LEFT JOIN ON, HAVING等基本的东西.

我试图计算包含特定字母/数字的行数,并根据字母/数字显示该计数.

即多少行包含包含"a/A"的条目(不区分大小写)

我要查询的表格是电影名称列表.我想做的就是分组并计算'az'和'0-9'并输出总数.我可以顺序运行36个查询:

SELECT filmname FROM films WHERE filmname ilike '%a%'
SELECT filmname FROM films WHERE filmname ilike '%b%'
SELECT filmname FROM films WHERE filmname ilike '%c%'
Run Code Online (Sandbox Code Playgroud)

然后在结果上运行pg_num_rows以查找我需要的数字,依此类推.

我知道这是多么密集和ilike更多所以我宁愿避免这样.虽然数据(下面)在数据中有大小写,但我希望结果集不区分大小写.即"盯着山羊的男人"a/A,t/T和s/S对于结果集不会计算两次.我可以将表复制到辅助工作表,其中数据全部是strtolower,如果它使查询更简单或更容易构造,则处理查询的数据集.

一个替代方案可能是

SELECT sum(length(regexp_replace(filmname, '[^X|^x]', '', 'g'))) FROM films;

每个字母组合,但再次36个查询,36个数据集,我更喜欢,如果我可以在单个查询中获取数据.

这是我的一组14部电影的短数据集(实际上包含275行)

District 9
Surrogates
The Invention Of Lying
Pandorum
UP
The Soloist
Cloudy With A Chance Of Meatballs
The Imaginarium of Doctor Parnassus
Cirque du Freak: The Vampires Assistant
Zombieland
9
The Men …
Run Code Online (Sandbox Code Playgroud)

sql postgresql count aggregate-functions

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

将SQL查询限制为每组最多两个计数

如果我有一个名为FAVORITE_FLAVOR的数据库表,其中每一行都有用户最喜欢的冰淇淋口味.

User ID | Flavor      | State
1       | Chocolate   | CA
2       | Vanilla     | ND
3       |   Chocolate | CA
4       | Rocky Road  | CA
5       | vanilla     | CA
6       | Vanilla     | CA
7       | Vanilla     | CA
Run Code Online (Sandbox Code Playgroud)

现在,如果我想查询每个州最流行的2种口味(规范化大小写和空格),我可以查询:

SELECT state, INITCAP(TRIM(flavor)), count(INITCAP(TRIM(flavor))) AS total
FROM favorite_flavor GROUP BY state, INITCAP(TRIM(flavor))
ORDER BY state ASC, total DESC;
Run Code Online (Sandbox Code Playgroud)

哪个回报:

CA | Vanilla    | 3
CA | Chocolate  | 2
CA | Rocky Road | 1
ND …
Run Code Online (Sandbox Code Playgroud)

sql oracle aggregate-functions oracle10g greatest-n-per-group

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

将聚合函数添加到WHERE子句中?

我想做一份报告,告诉所有在过去75天左右没有被呼叫过的客户.我的专栏如下.

Customer# Customer_Name Phone_Number Call_Date Salesman

通话日期会提取客户被叫方的日期.

这是我当前的查询.

select customer_no
      ,Customer_name
      ,Phone_number
      ,max(Call_Date) as Call_date
      ,Salesman
from salescalls
where call_date <= current_date - 75
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是它拉动每个客户并使用他们最后一次调用75天或更多天.

例如,当最后一个通话日期是6/4/14时,它会提取数字,并将通话日期列为11/10/13.

它不应该列出在过去75天内被调用的客户.所以为了防止这种情况,我试图在where子句中这样做.

Where max(call_date) <= current_date - 75
Run Code Online (Sandbox Code Playgroud)

但这只是给我一个错误:

aggregates not allowed in WHERE clause
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions where

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

为什么SUM(COL1 + COL2)和SUM(COL1)+ SUM(COL2)的收益率不同?

这是一个相当奇怪的结果.我希望这些产量相同.

请查看命令和结果的屏幕截图

以下是从数据库中提取excel数据的链接. https://twentius.opendrive.com/files?89038281_muoyg

编辑:用于SUM的列具有NULL单元格.

sql t-sql sql-server aggregate-functions aggregation

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

SparkSQL:使用两列的条件求和

我希望你能帮助我.我有一个DF如下:

val df = sc.parallelize(Seq(
  (1, "a", "2014-12-01", "2015-01-01", 100), 
  (2, "a", "2014-12-01", "2015-01-02", 150),
  (3, "a", "2014-12-01", "2015-01-03", 120), 
  (4, "b", "2015-12-15", "2015-01-01", 100)
)).toDF("id", "prodId", "dateIns", "dateTrans", "value")
.withColumn("dateIns", to_date($"dateIns")
.withColumn("dateTrans", to_date($"dateTrans"))
Run Code Online (Sandbox Code Playgroud)

我很乐意做一个groupBy prodId并汇总'value',将日期范围总结为'dateIns'和'dateTrans'列之间的差异.特别是,我想有一种方法来定义一个条件和,它总结了上述列之间预定义的最大差异内的所有值.即从dateIns('dateTrans' - 'dateIns'<= 10,20,30)10天,20天,30天之间发生的所有值.

在spark中是否有任何预定义的聚合函数允许进行条件求和?你建议开发一个aggr.UDF(如果是这样,任何建议)?我正在使用pySpqrk,但也很高兴获得Scala解决方案.非常感谢!

sql aggregate-functions apache-spark apache-spark-sql pyspark

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

MySQL Group By功能在不同的版本中

以下是一个简单的SQL查询:

SELECT * FROM *table_name*
GROUP BY *column_name*
Run Code Online (Sandbox Code Playgroud)

在我的系统中,我有MySQL 5.5.它工作得非常好.而在我朋友的系统中,他有MySQL 5.7,并且他收到以下错误:

错误1055(42000):SELECT列表的表达式#1不在GROUP BY子句中,并且包含非聚合列'testdb.assetentry.entryId',它在功能上不依赖于GROUP BY子句中的列; 这与sql_mode = only_full_group_by不兼容

很明显,这种情况正在发生,因为版本不同.

但我想知道的是背后的原因.

任何人都可以解释一下.

mysql sql aggregate-functions mysql-error-1055

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