notes -clickhouse - mysql和clickhouse语法差异

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 );


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值