在MySQL和Clickhouse中分别创建表:

mysql> create table scores(id int not null auto_increment primary key,user_id bigint,scores decimal(10,2));Clickhouse> create table scores(user_id bigint,scores decimal(10,2)) engine=Memory;insert into scores(user_id,scores)values(101,60.5),(102,50.25),(103,80),(104,90),(105,99),(106,92.75)
,(107,75),(108,89.75),(109,90.25),(110,0),(111,60),(112,100);mysql> select user_id,scores,interval(scores,0,60,80,90) p from scores;
+---------+--------+---+
| user_id | scores | p |
+---------+--------+---+
|     101 |  60.50 | 2 |
|     102 |  50.25 | 1 |
|     103 |  80.00 | 3 |
|     104 |  90.00 | 4 |
|     105 |  99.00 | 4 |
|     106 |  92.75 | 4 |
|     107 |  75.00 | 2 |
|     108 |  89.75 | 3 |
|     109 |  90.25 | 4 |
|     110 |   0.00 | 1 |
|     111 |  60.00 | 2 |
|     112 | 100.00 | 4 |
+---------+--------+---+
12 rows in set (0.00 sec)

适用于多数RDBMS数据库:

select case when scores>=0 and scores <60 then '[0,60)' when scores>=60 and scores <80 then '[60,80)'  when scores>=80 and scores <90 then '[80,90)' when scores>=90 and scores <=100 then '[90,100]' end p,count(user_id)
from scores group by p order by 1;+----------+----------------+
| p        | count(user_id) |
+----------+----------------+
| [0,60)   |              2 |
| [60,80)  |              3 |
| [80,90)  |              2 |
| [90,100] |              5 |
+----------+----------------+
4 rows in set (0.00 sec)

MySQL中的ELT和Interval 配合使用:


mysql> set sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)mysql> select elt(interval(scores,0,60,80,90),'[0,60)','[60-80)','[80,90)','[90,100]') p,count(user_id)
from scores
group by elt(interval(scores,0,60,80,90),'[0,60)','[60-80)','[80,90)','[90,100]') order by 1 ;
+----------+----------------+
| p        | count(user_id) |
+----------+----------------+
| [0,60)   |              2 |
| [60-80)  |              3 |
| [80,90)  |              2 |
| [90,100] |              5 |
+----------+----------------+
4 rows in set (0.00 sec)MySQL中 也支持列的别名
mysql> select elt(interval(scores,0,60,80,90),'[0,60)','[60-80)','[80,90)','[90,100]') p,count(user_id) from scores  group by p order by 1;

Clickhouse的multiif函数:

Clickhouse> select case when scores>=0 and scores <60 then '[0,60)' when scores>=60 and scores <80 then '[60,80)'  when scores>=80 and scores <90 then '[80,90)' when scores>=90 and scores <=100 then '[90,100]' end p,count(user_id) from scores group by p order by 1;SELECT multiIf((scores >= 0) AND (scores < 60), '[0,60)', (scores >= 60) AND (scores < 80), '[60,80)', (scores >= 80) AND (scores < 90), '[80,90)', (scores >= 90) AND (scores <= 100), '[90,100]', NULL) AS p,count(user_id)
FROM scores
GROUP BY p
ORDER BY 1 ASC┌─p────────┬─count(user_id)─┐
│ [0,60)   │              2 │
│ [60,80)  │              3 │
│ [90,100] │              5 │
│ [80,90)  │              2 │
└──────────┴────────────────┘4 rows in set. Elapsed: 0.005 sec. 

Clickhouse中提供了类似于MySQL的ELT的函数roundDown

SELECTroundDown(scores, [0, 60, 80, 90]) AS p,count(user_id)
FROM scores
GROUP BY p
ORDER BY p ASC┌─────p─┬─count(user_id)─┐
│  0.00 │              2 │
│ 60.00 │              3 │
│ 80.00 │              2 │
│ 90.00 │              5 │
└───────┴────────────────┘--- 可以细分为SELECTuser_id,scores,roundDown(scores, [0, 60, 80, 90])
FROM scores┌─user_id─┬─scores─┬─roundDown(scores, [0, 60, 80, 90])─┐
│     101 │  60.50 │                              60.00 │
│     102 │  50.25 │                               0.00 │
│     103 │  80.00 │                              80.00 │
│     104 │  90.00 │                              90.00 │
│     105 │  99.00 │                              90.00 │
│     106 │  92.75 │                              90.00 │
│     107 │  75.00 │                              60.00 │
│     108 │  89.75 │                              80.00 │
│     109 │  90.25 │                              90.00 │
│     110 │   0.00 │                               0.00 │
│     111 │  60.00 │                              60.00 │
│     112 │ 100.00 │                              90.00 │
└─────────┴────────┴────────────────────────────────────┘12 rows in set. Elapsed: 0.004 sec.可以看到roundDown函数和MySQL的ELT函数功能一致。

参考:

https://github.com/ClickHouse/ClickHouse/blob/master/tests/queries/0_stateless/00805_round_down.sql

Clickhouse的 MySQL ELT和interval 功能等同实现 roundDown相关推荐

  1. clickhouse 增量更新_ClickHouse王炸功能即将来袭?

    众所周知,MySQL 的用户群体很大,为了能够增强数据的实时性,很多解决方案会利用 binlog 将数据写入到 ClickHouse. 为了能够监听 binlog 事件,我们需要用到类似 canal ...

  2. python操作三大主流数据库(6)python操作mysql⑥新闻管理后台功能的完善(增、ajax异步删除新闻、改、查)...

    python操作mysql⑥新闻管理后台功能的完善(增.删.改.查) 安装表单验证 D:\python\python_mysql_redis_mongodb\version02>pip inst ...

  3. php mysql用户登录_php mysql实现用户登录功能的代码示例

    接着上次的php mysql添加用户的功能代码,今天来学习下php实现用户登录与注销的功能,通过跟踪session会话来保存用户的登陆状态. 1,登录页面 login.php 用户登录_www.# 用 ...

  4. MySQL——MySQL的数据查询功能

    MySQL的数据查询功能 SQL查询的7个关键词--以链家二手房数据为例 在实际工作中,使用最多的就是数据库的查询功能了.在数据查询过程中,通常会用到以下7个核心关键词: SELECT <sel ...

  5. oracle里有limit怎么用,[ORACLE]ORACLE 实现mysql中的limit 功能

    [ORACLE]ORACLE 实现mysql中的limit 功能 项目从mysql迁移到ORACLE中遇到移植问题,mysql中支持limit 而ORACLE say no . 解决方法 利用ORAC ...

  6. 【clickhouse】clickhouse强大智能的 Projection (投影) 功能

    1.概述 转载:ClickHouse王炸功能来袭,性能轻松提升40倍 各位,今年 ClickHouse 最王炸的功能来啦,没错,就是期待已久的 Projection (投影) 功能.ClickHous ...

  7. 【clickhouse】Clickhouse的MySQL引擎同步数据不准确 Decimal

    文章目录 1.概述 2. 场景2 2.1 概述 1.概述 我想从MySQL同步数据到Clickhouse,但是发现Clickhouse的MySQL引擎同步数据不准确,精度丢失而且还是不对的.(很多数据 ...

  8. win下mysql数据库双机配置_[数据库]windows下使用mysql双机热备功能

    [数据库]windows下使用mysql双机热备功能 0 2016-06-16 12:00:05 一. 准备工作 1. 准备两台服务器(电脑),接入局域网中,使互相ping得通对方 2. 两台服务器都 ...

  9. clickhouse 的mysql表引擎

    mysql表引擎 clickhouse的mysql表引擎可以和远端的mysql数据库表建立联系,这样如果远端的mysql表数据非常大的时候就可以利用clickhouse表引擎的olap能力进行数据查询 ...

最新文章

  1. 以大自然为师,可上天入地的11款仿生机器人
  2. vbs复制自身到启动文件夹
  3. Shell特殊变量:Shell $0,$#,$*,$@,$?,$$和命令行参数
  4. 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
  5. 大学生代跑全新简洁界面单页官网
  6. [debug] RuntimeError: “nll_loss_forward_reduce_cuda_kernel_2d_index“ not implemented for ‘Int‘
  7. 【Python】Django auth 修改密码如何实现?
  8. 地铁供电系统原理图_地铁供电系统的运行方式及特点分析吴迪原稿(图文高清版)...
  9. (1366, Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column '
  10. 软文写作技巧与营销的相互作用
  11. 同事换签名,心有猛虎细嗅蔷薇
  12. python 子域名爆破工具
  13. react class的写法
  14. 树莓派3强大很多--相比树莓派2
  15. 获取ios设备的电池信息
  16. Liquibase常用操作
  17. 3600万中国人在抖音“上清华”。
  18. HTML元素的宽度计算
  19. 隐马尔可夫模型(一):模型介绍
  20. 大数据 客户标签体系_大数据场景营销之标签体系、用户分群、用户画像

热门文章

  1. linux内核文档翻译之——V4L2-framework.txt V4L2 API Specification
  2. ream完美转换XML、JSON 转载
  3. 灰度共生矩阵(GLCM)计算速度快很多,用numpy写的
  4. Java API在HDFS上实现文件的上传、下载到本地、创建文件夹、删除文件和重命名文件
  5. 【自我解析】2020华为杯数学建模比赛C题
  6. elementUI组件el-table实现分页、勾选、勾选回显功能
  7. html怎么设置点击播放音乐,html5点击播放音乐试听按钮动画特效
  8. android 改变输入法enter键文字 为搜索 下一个 以及前往
  9. 小程序,微信支付:支付失败,商户号该产品权限未开通,请前往商户平台 产品中心检查后重试
  10. STM32学习笔记---触摸屏