我有一张照片表,该表中有两列名为"id"和"user_id".显然,一个用户可以拥有许多照片.我想运行一个查询,可以为每个用户提供照片计数.
任何帮助表示赞赏.
我在尝试为此表定义SQL查询时遇到问题:
在访问时记录患者及其体重读数表,其中包含以下列:
换句话说,如果在两个记录中两个访问ID相同,则在同一访问日期已经进行了两次重量读数.
我有这个问题"让所有患者至少有两个重量读数超过150":
select patient_id
from patients
where weight_val > 50
group by patient_id
having count(*) >= 2
Run Code Online (Sandbox Code Playgroud)
这是我的问题:如果我想修改此查询以便我可以查询以下内容:
是否可以在不删除"分组依据"声明的情况下执行此操作?如果没有,你推荐的方法是什么?如果它更容易(我正在使用Oracle),我也愿意添加日期列而不是访问ID.
我正在尝试在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) 我在Android中使用SQLite.我有查询,执行查询以及如何从游标打印计数.
Cursor dataCount = mDb.rawQuery("select count(*) from " + DATABASE_JOURNAL_TABLE, null);
Run Code Online (Sandbox Code Playgroud)
我没有表中的记录.
我想要实现的是直截了当的,但是它有点难以解释,我不知道它是否实际上甚至可能在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) 如果我有一个名为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
我想做一份报告,告诉所有在过去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) 这是一个相当奇怪的结果.我希望这些产量相同.

以下是从数据库中提取excel数据的链接. https://twentius.opendrive.com/files?89038281_muoyg
编辑:用于SUM的列具有NULL单元格.
我希望你能帮助我.我有一个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
以下是一个简单的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不兼容
很明显,这种情况正在发生,因为版本不同.
但我想知道的是背后的原因.
任何人都可以解释一下.
sql ×10
oracle ×3
mysql ×2
postgresql ×2
aggregation ×1
android ×1
apache-spark ×1
count ×1
ora-00600 ×1
oracle10g ×1
oracle11g ×1
plsql ×1
pyspark ×1
sql-server ×1
sqlite ×1
t-sql ×1
where ×1