ClickHouse 有没有办法用时间戳值执行 GROUP BY DAY/MONTH/YEAR() ?在将 MySQL 查询重写为 ClickHouse 时,很难弄清楚这一点。我的 MySQL 查询看起来像这样......
SELECT COUNT(this), COUNT(that) FROM table WHERE something = x AND stamp BETWEEN startdate AND enddate
SELECT COUNT(this), COUNT(that) FROM table WHERE something = x AND stamp BETWEEN startdate AND enddate GROUP BY DAY(stamp)
SELECT COUNT(this), COUNT(that) FROM table WHERE something = x AND stamp BETWEEN startdate AND enddate GROUP BY MONTH(stamp)
SELECT COUNT(this), COUNT(that) FROM table WHERE something = x AND stamp BETWEEN startdate AND enddate GROUP BY …Run Code Online (Sandbox Code Playgroud) 我有一张包含一些出勤数据的表格。我正在尝试制定一个具有不同用户的表,如果没有 NULL,则具有开始(MIN)和结束(MAX)。
我有“time_captured”的表
| 用户 | 开始 | 结尾 |
|---|---|---|
| A | 0 | 60 |
| A | 60 | 120 |
| A | 700 | |
| C | 120 | 180 |
| C | 540 | 860 |
我想要的结果
| 用户 | 开始 | 结尾 |
|---|---|---|
| A | 0 | |
| C | 120 | 860 |
我尝试了下面的代码,但是结果不是我所期望的(显示原始表格)
SELECT
MIN(time_captured.start_time),
CASE
WHEN
time_captured.end_time IS NULL THEN NULL
ELSE
MAX(time_captured.end_time)
END,
time_captured.user_sign
FROM
time_captured
GROUP BY
time_captured.user_sign,
time_captured.end_time
Run Code Online (Sandbox Code Playgroud)
| 用户 | 开始 | 结尾 |
|---|---|---|
| A | 0 | 60 |
| A | 60 | 120 |
| A | 700 | |
| C | 120 | 180 |
| C | 540 | 860 |
如何在数据中省略零?
例如使用MIN功能?我希望最小值除了0 ...
我怎样才能获得下一个最大的?
MIN(availables.price)
Run Code Online (Sandbox Code Playgroud)
如果我使用AVG功能,还有一种通常的方法可以以相同的方式跳过0吗?问题是我继承的表不使用NULL值,但对所有财务数据都有0.00.
谢谢,
我有几个查询结果使用一个或多个聚合函数和日期GROUP-BY,所以他们看起来像这样:
Date VisitCount(COUNT) TotalBilling(SUM) 1/1/10 234 15765.21 1/2/10 321 23146.27 1/3/10 289 19436.51
上面简化的SQL是:
SELECT
VisitDate,
COUNT(*) AS VisitCount,
SUM(BilledAmount) AS TotalBilling
FROM Visits
GROUP BY VisitDate
Run Code Online (Sandbox Code Playgroud)
我想要的是一种将聚合函数(如AVG)应用于结果集中的一列的方法.例如,我想将"AvgVisits"和"AvgBilling"列添加到结果集中,如下所示:
Date VisitCount(COUNT) TotalBilling(SUM) AvgVisits AvgBilling 1/1/10 234 15765.21 281.3 19449.33 1/2/10 321 23146.27 281.3 19449.33 1/3/10 289 19436.51 281.3 19449.33
SQL不允许将聚合函数应用于另一个聚合函数或子查询,因此我能想到的唯一方法是使用临时表或迭代结果集并手动计算值.有没有办法在没有临时表或手动计算的情况下在MSSQL2008中执行此操作?
我有两张桌子,我需要确定能为所有职位提供最高平均工资的公司.我的表格如下:
employer
eID (primary key), eName, location
position
eID (primary key), pName (primary key), salary)
Run Code Online (Sandbox Code Playgroud)
我写的代码确定所有高于1的平均工资,但我需要找到最高的平均工资
到目前为止,这是我的代码:
SQL> select eName
2 from Employer E inner join position P on E.eID = P.eID
3 where salary > (select avg(salary) from position);
Run Code Online (Sandbox Code Playgroud)
这会输出高于最低平均值的所有工资,但我只需要最高的平均值.我尝试使用avg(薪水)>(从位置选择avg(薪水))但我收到了不允许组功能的错误.
任何帮助或建议将不胜感激!
如何在sum上创建一个函数,如sum,min,max?
它将在结果集上运行.
Select join(',', Name), sum(total) From Account Group By IdCity
Run Code Online (Sandbox Code Playgroud) 我有一个类似于这样的用户表:
| ID | DONATION | RANK |
| 4 | 10 | 12 |
| 9 | 20 | 8 |
| 2 | 40 | 5 |
| 3 | 80 | 2 |
Run Code Online (Sandbox Code Playgroud)
我想构建一个查询,在那里我检索捐赠总和小于100的用户数,按排名排序......类似(显然不正确):
select count(*) where sum(donation) < 100 order by rank
Run Code Online (Sandbox Code Playgroud)
如果可能的话,无法弄清楚如何做到这一点.甚至不确定我是否正确地采取这种方式.任何想法或指针?
在C#中,如果我有一个字符串集合,并且我想获得一个逗号分隔的字符串表示集合(在开头或结尾没有无关的注释),我可以这样做:
string result = collection.Aggregate((s1, s2) => String.Format("{0}, {1}", s1, s2));
Run Code Online (Sandbox Code Playgroud)
我可以做点什么
result = collection[0]
for string in collection[1:]:
result = "{0}, {1}".format(result, string)
Run Code Online (Sandbox Code Playgroud)
但这感觉就像一块垃圾.python是否有一种优雅的方式来完成同样的事情?
我有一张交易表.所有交易都存储为正数,如果存款或取款只有行动更改.如何编写可以根据操作总结数字的查询
-actions- 1买2卖5股息
ID ACTION SYMBOL PRICE SHARES
1 1 AGNC 27.50 150
2 2 AGNC 30.00 50
3 5 AGNC 1.25 100
Run Code Online (Sandbox Code Playgroud)
因此查询应显示AGNC共有100个共享.
SELECT
symbol,sum(shares) AS shares,
ROUND(abs(sum((price * shares))),2) AS cost,
FROM bf_transactions
WHERE (action_id <> 5)
GROUP BY symbol
HAVING sum(shares) > 0
Run Code Online (Sandbox Code Playgroud)
我最初使用该查询时,我有正数/负数,并且工作得很好..但我现在不知道怎么做只有正数.
我想知道如何将表自身联接起来或使用case语句在视图中分配最大值。说我有下表:
Lastname Firstname Filename
Smith John 001
Smith John 002
Smith Anna 003
Smith Anna 004
Run Code Online (Sandbox Code Playgroud)
我想创建一个列出所有值但又有另一列显示当前行是否为最大行的视图,例如:
Lastname Firstname Filename Max_Filename
Smith John 001 NULL
Smith John 002 002
Smith Anna 003 NULL
Smith Anna 004 NULL
Run Code Online (Sandbox Code Playgroud)
这可能吗?我尝试了以下查询:
SELECT Lastname, Firstname, Filename, CASE WHEN Filename = MAX(FileName)
THEN Filename ELSE NULL END AS Max_Filename
Run Code Online (Sandbox Code Playgroud)
但是我被告知姓氏不在group by子句中。但是,如果我按姓,名,文件名分组,则max_filename中的所有内容都与文件名相同。
您能否帮助我了解我在做什么错以及如何使此查询正常工作?