【问题标题】:How to write clickhouse SQL correctly?如何正确编写clickhouse SQL?
【发布时间】:2021-07-06 11:51:49
【问题描述】:

SQL 可以在 Oracle 上执行,但不能在 clickhouse 上执行:

SELECT *
FROM PART, PARTSUPP
WHERE P_PARTKEY = PS_PARTKEY
    AND PS_SUPPLYCOST = (
        SELECT MIN(PS_SUPPLYCOST)
        FROM PARTSUPP
        WHERE P_PARTKEY = PS_PARTKEY
    )

执行: Missing columns: 'P_PARTKEY' while processing query: 'SELECT min(PS_SUPPLYCOST)...

我们将不胜感激。

谢谢。

【问题讨论】:

  • CH 不支持相关子查询。请改用 JOIN 或 ArgMin。
  • @DennyCrane 知道了,谢谢。 :)

标签: clickhouse


【解决方案1】:

相关子查询 SQL:

SELECT
    *
FROM
    (
    SELECT
        S_ACCTBAL,
        S_NAME,
        N_NAME,
        P_PARTKEY,
        P_MFGR ,
        S_ADDRESS,
        S_PHONE,
        S_COMMENT
    FROM
        PART,
        SUPPLIER,
        PARTSUPP,
        NATION,
        REGION
    WHERE
        P_PARTKEY = PS_PARTKEY
        AND S_SUPPKEY = PS_SUPPKEY
        AND P_SIZE = 25
        AND P_TYPE LIKE '%COPPER'
        AND S_NATIONKEY = N_NATIONKEY
        AND N_REGIONKEY = R_REGIONKEY
        AND R_NAME = 'ASIA'
        AND PS_SUPPLYCOST = (
        SELECT
            MIN(PS_SUPPLYCOST)
        FROM
            PARTSUPP,
            SUPPLIER,
            NATION,
            REGION
        WHERE
            P_PARTKEY = PS_PARTKEY
            AND S_SUPPKEY = PS_SUPPKEY
            AND S_NATIONKEY = N_NATIONKEY
            AND N_REGIONKEY = R_REGIONKEY
            AND R_NAME = 'ASIA' )
    ORDER BY
        S_ACCTBAL DESC,
        N_NAME,
        S_NAME,
        P_PARTKEY )
WHERE
    ROWNUM <= 100;

对于 Clickhouse:

SELECT
    *
from
    (
    SELECT
        s.S_ACCTBAL AS S_ACCTBAL,
        s.S_NAME AS S_NAME,
        n.N_NAME AS N_NAME,
        p.P_PARTKEY AS P_PARTKEY,
        p.P_MFGR AS P_MFGR,
        s.S_ADDRESS AS S_ADDRESS,
        s.S_PHONE AS S_PHONE,
        s.S_COMMENT AS S_COMMENT
    FROM
        PART AS p,
        PARTSUPP AS ps,
        SUPPLIER AS s,
        NATION AS n,
        REGION AS r,
        (
        SELECT
            P_PARTKEY,
            MIN(PS_SUPPLYCOST) AS PS_SUPPLYCOST
        FROM
            PARTSUPP,
            PART,
            SUPPLIER,
            NATION,
            REGION
        WHERE
            P_PARTKEY = PS_PARTKEY
            AND S_SUPPKEY = PS_SUPPKEY
            AND S_NATIONKEY = N_NATIONKEY
            AND N_REGIONKEY = R_REGIONKEY
            AND R_NAME = 'ASIA'
        GROUP BY
            P_PARTKEY) pps
    WHERE
        p.P_PARTKEY = pps.P_PARTKEY
        AND ps.PS_SUPPLYCOST = pps.PS_SUPPLYCOST
        AND p.P_PARTKEY = ps.PS_PARTKEY
        AND s.S_SUPPKEY = ps.PS_SUPPKEY
        AND p.P_SIZE = 25
        AND p.P_TYPE LIKE '%COPPER'
        AND s.S_NATIONKEY = n.N_NATIONKEY
        AND n.N_REGIONKEY = r.R_REGIONKEY
        AND r.R_NAME = 'ASIA')
ORDER BY
    S_ACCTBAL DESC,
    N_NAME,
    S_NAME,
    P_PARTKEY
LIMIT 100;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 2022-07-07
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多