clickhouse对于sql语法要求比mysql更加严格。
一 嵌套查询差异
嵌套查询中,子查询可以存在于父查询的任意位置。
1 父查询结果作为子查询条件 【2021-01-16】
SELECT
t0.*,
(
SELECT score FROM score WHERE userId = t0.id AND className = '语文'
) AS `语文`
FROM `user` t0
这样会报错说t0.id找不到,在mysql是可以查询出来的。
根据sql的执行顺序,理论上在 select list时t0已经存在,搞不懂,先记录为clickhouse不支持,哪位大神指导,指点一下小弟!
2 cliickhouse不支持row_number() over()函数,mysql支持
查询每个科目第一名的成绩
SELECT
className,
score
FROM (
SELECT
s.*,
ROW_NUMBER() OVER (PARTITION BY className ORDER BY score DESC) AS new_index
FROM class_score s
) t0 WHERE t0.new_index = 1
测试数据
CREATE TABLE `user`(
`id` Int16,
`name` String,
`age` Int8
)
ENGINE = MergeTree()
ORDER BY id;
INSERT INTO `user` VALUES(
1, 'chenjie', 26
),( 2, 'humin', 26);
CREATE TABLE `score`(
`id` Int16,
`userId` Int16,
`className` String,
`score` Float32
)
ENGINE = MergeTree()
ORDER BY id;
INSERT INTO `score` VALUES( 1, 1, '语文', 99 ),( 2, 1, '数学', 99 );