Skip to content

Implicit cast from Boolean to UInt8 #3291

@sundy-li

Description

@sundy-li

Summary: make some functions work with boolean datatypes.

So we can transform avg(boolean) ---> avg(uint8)


Now databend boolean return true/false , like this:

[local] [sql]> select 1>0, 0>1;
[ok] ✅ Query precheck passed!
+---------+---------+
| (1 > 0) | (0 > 1) |
+---------+---------+
| true    | false   |
+---------+---------+
[ok] ✅ read rows: 1, read bytes: 1 B, rows/sec: 500 (rows/sec), bytes/sec: 500 (B/sec), time: 0.002 sec

if we can make boolean return 0/ 1 like this:

[local] [sql]> select 1>0, 0>1;
[ok] ✅ Query precheck passed!
+---------+---------+
| (1 > 0) | (0 > 1) |
+---------+---------+
| 1       | 0        |
+---------+---------+
[ok] ✅ read rows: 1, read bytes: 1 B, rows/sec: 500 (rows/sec), bytes/sec: 500 (B/sec), time: 0.002 sec

if support boolean return 0 or 1 , can optimize sql :
The percentage of delays by carrier for 2007

SELECT Carrier, c, c2, c*100/c2 as c3
FROM
(
    SELECT
        IATA_CODE_Reporting_Airline AS Carrier,
        count(*) AS c
    FROM ontime
    WHERE DepDelay>10
        AND Year=2007
    GROUP BY Carrier
) q
JOIN
(
    SELECT
        IATA_CODE_Reporting_Airline AS Carrier,
        count(*) AS c2
    FROM ontime
    WHERE Year=2007
    GROUP BY Carrier
) qq USING Carrier
ORDER BY c3 DESC;

Better version of the same query:

SELECT IATA_CODE_Reporting_Airline AS Carrier, avg(DepDelay>10)*100 AS c3
FROM ontime
WHERE Year=2007
GROUP BY Carrier
ORDER BY c3 DESC

Originally posted by @wubx in #3267

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions