用SQL查询创建水平垂直直方图

Posted wzy0623

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用SQL查询创建水平垂直直方图相关的知识,希望对你有一定的参考价值。

mysql> select * from t1;
+--------+
| deptno |
+--------+
|     10 |
|     10 |
|     10 |
|     20 |
|     20 |
|     20 |
|     20 |
|     30 |
|     30 |
|     30 |
|     30 |
|     30 |
|     30 |
+--------+
13 rows in set (0.00 sec)

1. 水平直方图
返回结果集如下所示,*号个数为对应DEPTNO的记录数。

DEPTNO CNT
------ ----------
    10 ***
    20 *****
    30 ******

查询:

mysql> select deptno,lpad('*',count(*),'*') cnt from t1 group by deptno;
+--------+--------+
| deptno | cnt    |
+--------+--------+
|     10 | ***    |
|     20 | ****   |
|     30 | ****** |
+--------+--------+
3 rows in set (0.00 sec)

2. 垂直直方图
返回结果集如下所示,*号个数为对应DEPTNO的记录数。

D10 D20 D30
--- --- ---
        *
    *   *
    *   *
*   *   *
*   *   *
*   *   *

查询:

mysql> select max(d10) d10,max(d20) d20,max(d30) d30 from 
    -> (select row_number() over (partition by deptno) rn,
    ->        case when deptno=10 then '*' else '' end d10,
    ->        case when deptno=20 then '*' else '' end d20,
    ->        case when deptno=30 then '*' else '' end d30 
    ->   from t1) t group by rn;
+------+------+------+
| d10  | d20  | d30  |
+------+------+------+
| *    | *    | *    |
| *    | *    | *    |
| *    | *    | *    |
|      | *    | *    |
|      |      | *    |
|      |      | *    |
+------+------+------+
6 rows in set (0.00 sec)

以上是关于用SQL查询创建水平垂直直方图的主要内容,如果未能解决你的问题,请参考以下文章

SQL Pivot - 查询结果垂直到水平

Sql Pivot:垂直显示字段

带有大小写的Oracle SQL查询垂直到水平[重复]

SQL Server 表分区之水平表分区

数据库的水平分割和垂直分割

关于数据库表的水平拆分和垂直拆分