Unexpected result when composing aggregations with `case` expressions
Maintainer thường phản hồi trong vòng 5 ngày
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
Hướng nghiên cứu
Start by reproducing the PRQL input and generated SQL from the issue with the compiler, targeting ClickHouse. Then trace how aggregation expressions containing case are lowered into SQL and why this produces an intermediate CTE; compare the output with the expected SQL. Done when the example generates valid SQL with the aggregation composed in the final SELECT.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
What happened?
Hi,
I am experiencing a bug where prql generates an invalid SQL because there is a case expression inside a sum. Let me demonstrate.
PRQL input
prql target:sql.clickhouse
from `t`.`table`
group {(group_variable)} (aggregate {
`new_variable` = (sum (case [(var | as int) < 10 => 1, true => 0])) * 100 / (count null)
})
SQL output
WITH table_0 AS (
SELECT
group_variable,
COALESCE(
SUM(
CASE
WHEN CAST(var AS int) < 10 THEN 1
ELSE 0
END
),
0
) AS _expr_0,
var
FROM
t.`table`
)
SELECT
group_variable,
(_expr_0 * 100 / COUNT(*)) AS new_variable
FROM
table_0
GROUP BY
group_variable
-- Generated by PRQL compiler version:0.13.3 (https://prql-lang.org)
Expected SQL output
SELECT
group_variable,
(COALESCE(SUM(
CASE
WHEN CAST(var AS int) < 10 THEN 1
ELSE 0
END
), 0) * 100 / COUNT(*)) AS new_variable
FROM
t.`table`
GROUP BY
group_variable
MVCE confirmation
- Minimal example
- New issue
Anything else?
For some reason the system breaks the expression into a intermediary CTE for the sum when the case expr exists.
- Ngôn ngữ chính
- Rust
- Star
- 10.9k
- Fork
- 261
- Merge trung bình
- 4 ngày 7 giờ
- Pull request đã merge (30 ngày)
- 77
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của PRQL/prql
-
Underscore does not work as expectedCó thể đã có người làm @prql-bot đã nhận 6 ngày trước. Đang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
PRQL/prql#6518 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
prqlc Debug Report HTML Does Not Escape Source File Name, Enabling Stored XSS via PRQLC_DEBUG_LOGĐang mởbug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
PRQL/prql#6502 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Add `.prql` to linguistĐang mởfriendliness integrations
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 64/100
PRQL/prql#1636 · 2 bình luận · 2 reaction ·
Maintainer thường phản hồi trong vòng 5 ngày
-
review-runs-tracking: 2026-11Đang mởreview-runs-tracking
Độ khó 3/5 Nửa ngày Mức phù hợp với người mới 5/100
PRQL/prql#6513 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
-
Formatted SQL adds spaces inside the next string literal after a string ending in a backslashCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởbug
Độ khó 4/5 1-2 ngày Mức phù hợp với người mới 38/100
PRQL/prql#6500 · 2 bình luận ·
Maintainer thường phản hồi trong vòng 5 ngày
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
RustCrypto/utils#1597 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Non-`main` default branchesĐang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
max-sixty/worktrunk#4727 · 7 bình luận · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 86/100
Maintainer thường phản hồi trong vòng 1 ngày
-
follow-up
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 73/100
carrick-sh/carrick#1859 ·
Maintainer thường phản hồi trong vòng 1 ngày