AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[clickhouse](coding)

Martin Hope
Soenderby
Asked: 2025-02-08 02:22:56 +0800 CST

lagInFrame 行为与标准 SQL LAG 有何不同?

  • 5

clickhouse文档指出:

lagInFrame 行为与标准 SQL 滞后窗口函数不同。Clickhouse 窗口函数 lagInFrame 尊重窗口框架。

这个窗口框架是什么,它如何影响输出?

示例:我想在时间序列中找到连续两行的时间列值差大于给定阈值的行。

我想将每一行与前一行进行比较。

以下内容使我相信下面的查询是正确的方法。

为了获得与滞后相同的行为,请使用 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING。

SELECT lag, startdate, diff
FROM  (SELECT startdate,
              lagInFrame(startdate)
                OVER(
                  ORDER BY startdate ASC ROWS BETWEEN UBOUNDED PRECEDING AND
                  UNBOUNDED FOLLOWING) AS lag,
              Date_diff('minute', lag, startdate) AS diff
       FROM   <table>
       ORDER  BY startdate ASC)
WHERE  diff > 15 

但是,以下查询给出了完全相同的结果并且占用更少的内存。

SELECT lag, startdate, diff
FROM  (SELECT startdate,
              lagInFrame(startdate)
                OVER(
                  ORDER BY startdate ASC ROWS BETWEEN 1 PRECEDING AND
                  CURRENT ROW) AS lag,
              Date_diff('minute', lag, startdate) AS diff
       FROM   <table>
       ORDER  BY startdate ASC)
WHERE  diff > 15 

区别在于
OVER(ORDER BY startdate ASC ROWS BETWEEN UBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
:
OVER(ORDER BY startdate ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW)

查询的输出是否存在差异的情况?

clickhouse
  • 1 个回答
  • 27 Views
Martin Hope
lyrixx
Asked: 2024-05-21 20:47:48 +0800 CST

如何对 clickhouse 中的 groupArray 单元格中的值进行计数和分组

  • 9

我有以下代码:

drop table if exists statusCodes;

create table statusCodes (statusCode UInt16) engine=Memory;

insert into statusCodes values (0);
insert into statusCodes values (200);
insert into statusCodes values (200);
insert into statusCodes values (200);
insert into statusCodes values (200);
insert into statusCodes values (200);
insert into statusCodes values (201);
insert into statusCodes values (301);
insert into statusCodes values (301);
insert into statusCodes values (301);
insert into statusCodes values (301);
insert into statusCodes values (304);
insert into statusCodes values (404);
insert into statusCodes values (500);

select
    multiIf(statusCode >= 500, '5xx', statusCode >= 400, '4xx', statusCode >= 300, '3xx', statusCode >= 200, '2xx', 'errored'),
    groupArray(statusCode),
    count(1) as count
from statusCodes
group by 1;

在这里小提琴:https://fiddle.clickhouse.com/b3b3dfb9-1826-47a8-b201-831498c941f2

它给了我

1 2 3
4xx [404] 1
3xx [301, 301, 301, 301, 304] 5
2xx [200, 200, 200, 200, 200, 201] 6
5xx [500] 1
errored [0] 1

但我想要有类似的东西

1 2 3
2xx (200, 5), (201, 1) 6
3xx (301, 3), (304, 1) 5
4xx (404, 1) 1
5xx (500, 1) 1
errored (0, 1) 1

因此,总而言之,我想按主类别(2xx、3xx、4xx、5xx)对所有状态代码进行分组,并在行中按该类别的实际状态代码进行另一个分组。

clickhouse
  • 1 个回答
  • 31 Views
Martin Hope
White Cat
Asked: 2024-05-14 22:56:41 +0800 CST

ClickHouse:使用 SELECT 语句时出现 NO_COMMON_TYPE 异常

  • 6

我试图从 ClickHouse DB 中选择viewIds数组包含的所有项目341852351。我运行这个查询:

SELECT *
FROM 
array join viewIds
WHERE has(viewIds, '341852351')

但我收到这个错误:

Int256、String 类型没有超类型,因为其中一些是 String/FixedString,而另一些则不是:在处理 has(viewIds, '341852351') 时。(NO_COMMON_TYPE)

请帮我解决这个问题。

clickhouse
  • 1 个回答
  • 14 Views
Martin Hope
White Cat
Asked: 2024-01-22 18:43:43 +0800 CST

Clickhouse CLI:不允许多语句例外

  • 6

我正在尝试使用 Clickhouse CLI 执行此查询:

INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def')

我在这里找到的: https: //clickhouse.com/docs/en/sql-reference/syntax

但它向我显示以下错误:

Code: 62. DB::Exception: Syntax error (Multi-statements are not allowed): failed at position 17 (end of query) (line 1, col 17)

你能帮我解决这个问题吗?我不明白如何使用 CLI 运行这样的查询。

clickhouse
  • 1 个回答
  • 21 Views
Martin Hope
emi
Asked: 2023-12-23 09:23:16 +0800 CST

通过顶级竞争对手分析计算每日语音份额的 SQL 查询

  • 6

我需要有关编写查询来分析serp_analytics表中的网站流量数据的帮助。表结构如下:

柱子 类型
关键字 ID 整数
网站 varchar
est_traffic 整数
日期 约会时间

我的目标是计算我的网站 ('youtube.com') 的每日“声音份额”,并根据声音份额确定排名前 3 的竞争网站。分析应涵盖特定的日期范围,:start并提供:end参数。

具体要求:

  1. 计算每日语音份额:我需要计算“youtube.com”的每日语音份额。声音份额的计算方法是,将est_traffic某一天“youtube.com”的声音总和除以est_traffic当天所有网站的总声音量,再乘以 100。

  2. 确定前 3 个竞争对手:根据当天的声音份额:end,确定前 3 个网站(不包括“youtube.com”)。这些顶级竞争对手应包含在指定日期范围内每天的输出中。

  3. 输出结构:所需的输出是结构化格式,其中每个条目对应一个网站,包括“youtube.com”和前 3 个竞争对手。每个条目应列出该日期范围内的每日语音份额。如果网站在某一天没有数据,则其声音份额应显示为 0。

  4. 完整的日期覆盖范围:输出必须包括:start和 之间范围内的所有日期:end。如果某个网站在特定日期没有数据,则该日期的语音份额应为 0。

这是一个示例数据集:

| keyword id | website      | est_traffic | date       |
|------------|--------------|-------------|------------|
| 1          | google.com   | 10          | 2023-12-22 |
| 1          | facebook.com | 20          | 2023-12-22 |
| 1          | youtube.com  | 5           | 2023-12-22 |
| 1          | twitter.com  | 40          | 2023-12-22 |
| 1          | linkedin.com | 50          | 2023-12-22 |
| 1          | google.com   | 30          | 2023-12-23 |
| 1          | facebook.com | 20          | 2023-12-23 |
| 1          | youtube.com  | 5           | 2023-12-23 |
| 1          | twitter.com  | 10          | 2023-12-23 |
| 1          | linkedin.com | 15          | 2023-12-23 |

基于此,日期 2023-12-22 和 2023-12-23 之间“youtube.com”的输出应如下所示:

[
    {
        "domain": "youtube.com",
        "share_of_voice": [
            {"date": "2023-12-22", "value": 4},
            {"date": "2023-12-23", "value": 6.25}
        ]
    },
    // Entries for top 3 competitors
    {
        "domain": "google.com",
        "share_of_voice": [
            {"date": "2023-12-22", "value": 8},
            {"date": "2023-12-23", "value": 37.5}
        ]
    },
    {
        "domain": "twitter.com",
        "share_of_voice": [
            {"date": "2023-12-22", "value": 32},
            {"date": "2023-12-23", "value": 12.5}
        ]
    },
    {
        "domain": "linkedin.com",
        "share_of_voice": [
            {"date": "2023-12-22", "value": 40},
            {"date": "2023-12-23", "value": 18.75}
        ]
    },
]

如果无法以上述格式获得输出,则返回任何内容,只要它包含所有数据就没关系。

预先感谢您的帮助!

clickhouse
  • 2 个回答
  • 46 Views
Martin Hope
Chris White
Asked: 2023-11-28 03:39:15 +0800 CST

ClickHouse 计算两个 DateTime64 之间的纳秒时间戳作为列 DEFAULT

  • 5

我有一个 ClickHouse 表,其中包含以下架构:

`Start` DateTime64(9),
`End` DateTime64(9),
`Duration` Int64 DEFAULT toInt64((toDecimal64(End, 9) - toDecimal64(Start, 9)) * 1000000000),

Start和End是DateTime64(9)具有纳秒精度的字段,我还需要将它们的差异存储在Duration我希望 ClickHouse 自动生成的字段中。我很难找到将DateTime64(9)字段转换为纳秒纪元时间戳的最佳方法,最终拼凑出一个解决方案,将它们转换为小数并乘以一个常数,以整数形式给出纳秒的差值。

这有效,我似乎得到了正确的Duration值,但该* 1000000000部分对我来说似乎有一种气味。有没有更好的方法来做到这一点,我不知道?我查看了 ClickHouse 的日期函数,没有找到处理纳秒精度的函数,只有toUnixTimestamp()秒精度。

clickhouse
  • 1 个回答
  • 18 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve