ITPub博客

首页 > 数据库 > > DorisDB vs ClickHouse 查询测试

DorisDB vs ClickHouse 查询测试

作者:gaokeke123 时间:2022-07-27 10:25:54 0 删除 编辑

测试方法

为了方便用户快速的了解DorisDB的性能指标,这里我们提供了一个标准的Star schema benchmark的测试方法和工具仅供参考。

Star schema benchmark(以下简称SSB)是学术界和工业界广泛使用的一个星型模型测试集(来源论文),通过这个测试集合也可以容易的和其他OLAP产品进行性能对比。

测试数据

表名行数解释
lineorder6亿SSB商品订单表
customer300万SSB客户表
part140万SSB 零部件表
supplier20万SSB 供应商表
dates2556日期表
lineorder_flat6亿SSB打平后的宽表

测试数据环境

主机资源:

主机内存CPU
CentOS128G16core

DorisDB使用资源:

FE 单台,BE 5台 部署

内存CPU数量
80G16core6

ClickHouse使用资源:

内存CPU数量
80G16core1

说明:由于资源原因,DorisDB、ClickHouse集群和上同时部署了CDH集群和其他组件,所以该测试并不能100%代表DorisDB、ClickHouse的性能。

测试结果

单表测试结果如下

img

多表测试结果如下

img

测试过程

DorisDB

下载ssb-poc工具包并编译

  1. wget http://dorisdb-public.oss-cn-zhangjiakou.aliyuncs.com/ssb-poc-0.9.zip
  2. unzip ssb-poc-0.9.zip
  3. cd ssb-poc
  4. make && make install
  5. #所有相关工具安装到output目录

生成数据

  1. cd output 
  2. # 运行生成数据的脚本
  3. bin/gen-ssb.sh 100 data_dir

建表

  1. CREATE TABLE IF NOT EXISTS `lineorder` (
  2.   `lo_orderkey` int(11) NOT NULL COMMENT "",
  3.   `lo_linenumber` int(11) NOT NULL COMMENT "",
  4.   `lo_custkey` int(11) NOT NULL COMMENT "",
  5.   `lo_partkey` int(11) NOT NULL COMMENT "",
  6.   `lo_suppkey` int(11) NOT NULL COMMENT "",
  7.   `lo_orderdate` int(11) NOT NULL COMMENT "",
  8.   `lo_orderpriority` varchar(16) NOT NULL COMMENT "",
  9.   `lo_shippriority` int(11) NOT NULL COMMENT "",
  10.   `lo_quantity` int(11) NOT NULL COMMENT "",
  11.   `lo_extendedprice` int(11) NOT NULL COMMENT "",
  12.   `lo_ordtotalprice` int(11) NOT NULL COMMENT "",
  13.   `lo_discount` int(11) NOT NULL COMMENT "",
  14.   `lo_revenue` int(11) NOT NULL COMMENT "",
  15.   `lo_supplycost` int(11) NOT NULL COMMENT "",
  16.   `lo_tax` int(11) NOT NULL COMMENT "",
  17.   `lo_commitdate` int(11) NOT NULL COMMENT "",
  18.   `lo_shipmode` varchar(11) NOT NULL COMMENT ""
  19. ) ENGINE=OLAP
  20. DUPLICATE KEY(`lo_orderkey`)
  21. COMMENT "OLAP"
  22. DISTRIBUTED BY HASH(`lo_orderkey`) BUCKETS 96
  23. PROPERTIES (
  24. "replication_num" = "1",
  25. "colocate_with" = "group1",
  26. "in_memory" = "false",
  27. "storage_format" = "DEFAULT"
  28. );
  29.   
  30.   
  31. CREATE TABLE IF NOT EXISTS `customer` (
  32.   `c_custkey` int(11) NOT NULL COMMENT "",
  33.   `c_name` varchar(26) NOT NULL COMMENT "",
  34.   `c_address` varchar(41) NOT NULL COMMENT "",
  35.   `c_city` varchar(11) NOT NULL COMMENT "",
  36.   `c_nation` varchar(16) NOT NULL COMMENT "",
  37.   `c_region` varchar(13) NOT NULL COMMENT "",
  38.   `c_phone` varchar(16) NOT NULL COMMENT "",
  39.   `c_mktsegment` varchar(11) NOT NULL COMMENT ""
  40. ) ENGINE=OLAP
  41. DUPLICATE KEY(`c_custkey`)
  42. COMMENT "OLAP"
  43. DISTRIBUTED BY HASH(`c_custkey`) BUCKETS 12
  44. PROPERTIES (
  45. "replication_num" = "1",
  46. "colocate_with" = "groupa2",
  47. "in_memory" = "false",
  48. "storage_format" = "DEFAULT"
  49. );
  50.   
  51.   
  52. CREATE TABLE IF NOT EXISTS `dates` (
  53.   `d_datekey` int(11) NOT NULL COMMENT "",
  54.   `d_date` varchar(20) NOT NULL COMMENT "",
  55.   `d_dayofweek` varchar(10) NOT NULL COMMENT "",
  56.   `d_month` varchar(11) NOT NULL COMMENT "",
  57.   `d_year` int(11) NOT NULL COMMENT "",
  58.   `d_yearmonthnum` int(11) NOT NULL COMMENT "",
  59.   `d_yearmonth` varchar(9) NOT NULL COMMENT "",
  60.   `d_daynuminweek` int(11) NOT NULL COMMENT "",
  61.   `d_daynuminmonth` int(11) NOT NULL COMMENT "",
  62.   `d_daynuminyear` int(11) NOT NULL COMMENT "",
  63.   `d_monthnuminyear` int(11) NOT NULL COMMENT "",
  64.   `d_weeknuminyear` int(11) NOT NULL COMMENT "",
  65.   `d_sellingseason` varchar(14) NOT NULL COMMENT "",
  66.   `d_lastdayinweekfl` int(11) NOT NULL COMMENT "",
  67.   `d_lastdayinmonthfl` int(11) NOT NULL COMMENT "",
  68.   `d_holidayfl` int(11) NOT NULL COMMENT "",
  69.   `d_weekdayfl` int(11) NOT NULL COMMENT ""
  70. ) ENGINE=OLAP
  71. DUPLICATE KEY(`d_datekey`)
  72. COMMENT "OLAP"
  73. DISTRIBUTED BY HASH(`d_datekey`) BUCKETS 1
  74. PROPERTIES (
  75. "replication_num" = "1",
  76. "in_memory" = "false",
  77. "colocate_with" = "groupa3",
  78. "storage_format" = "DEFAULT"
  79. );
  80.   
  81.  CREATE TABLE IF NOT EXISTS `supplier` (
  82.   `s_suppkey` int(11) NOT NULL COMMENT "",
  83.   `s_name` varchar(26) NOT NULL COMMENT "",
  84.   `s_address` varchar(26) NOT NULL COMMENT "",
  85.   `s_city` varchar(11) NOT NULL COMMENT "",
  86.   `s_nation` varchar(16) NOT NULL COMMENT "",
  87.   `s_region` varchar(13) NOT NULL COMMENT "",
  88.   `s_phone` varchar(16) NOT NULL COMMENT ""
  89. ) ENGINE=OLAP
  90. DUPLICATE KEY(`s_suppkey`)
  91. COMMENT "OLAP"
  92. DISTRIBUTED BY HASH(`s_suppkey`) BUCKETS 12
  93. PROPERTIES (
  94. "replication_num" = "1",
  95. "colocate_with" = "groupa4",
  96. "in_memory" = "false",
  97. "storage_format" = "DEFAULT"
  98. );
  99.   
  100. CREATE TABLE IF NOT EXISTS `part` (
  101.   `p_partkey` int(11) NOT NULL COMMENT "",
  102.   `p_name` varchar(23) NOT NULL COMMENT "",
  103.   `p_mfgr` varchar(7) NOT NULL COMMENT "",
  104.   `p_category` varchar(8) NOT NULL COMMENT "",
  105.   `p_brand` varchar(10) NOT NULL COMMENT "",
  106.   `p_color` varchar(12) NOT NULL COMMENT "",
  107.   `p_type` varchar(26) NOT NULL COMMENT "",
  108.   `p_size` int(11) NOT NULL COMMENT "",
  109.   `p_container` varchar(11) NOT NULL COMMENT ""
  110. ) ENGINE=OLAP
  111. DUPLICATE KEY(`p_partkey`)
  112. COMMENT "OLAP"
  113. DISTRIBUTED BY HASH(`p_partkey`) BUCKETS 12
  114. PROPERTIES (
  115. "replication_num" = "1",
  116. "colocate_with" = "groupa5",
  117. "in_memory" = "false",
  118. "storage_format" = "DEFAULT"
  119. );
  120.   
  121. CREATE TABLE IF NOT EXISTS `lineorder_flat` (
  122.   `LO_ORDERKEY` int(11) NOT NULL COMMENT "",
  123.   `LO_ORDERDATE` date NOT NULL COMMENT "",
  124.   `LO_LINENUMBER` tinyint(4) NOT NULL COMMENT "",
  125.   `LO_CUSTKEY` int(11) NOT NULL COMMENT "",
  126.   `LO_PARTKEY` int(11) NOT NULL COMMENT "",
  127.   `LO_SUPPKEY` int(11) NOT NULL COMMENT "",
  128.   `LO_ORDERPRIORITY` varchar(100) NOT NULL COMMENT "",
  129.   `LO_SHIPPRIORITY` tinyint(4) NOT NULL COMMENT "",
  130.   `LO_QUANTITY` tinyint(4) NOT NULL COMMENT "",
  131.   `LO_EXTENDEDPRICE` int(11) NOT NULL COMMENT "",
  132.   `LO_ORDTOTALPRICE` int(11) NOT NULL COMMENT "",
  133.   `LO_DISCOUNT` tinyint(4) NOT NULL COMMENT "",
  134.   `LO_REVENUE` int(11) NOT NULL COMMENT "",
  135.   `LO_SUPPLYCOST` int(11) NOT NULL COMMENT "",
  136.   `LO_TAX` tinyint(4) NOT NULL COMMENT "",
  137.   `LO_COMMITDATE` date NOT NULL COMMENT "",
  138.   `LO_SHIPMODE` varchar(100) NOT NULL COMMENT "",
  139.   `C_NAME` varchar(100) NOT NULL COMMENT "",
  140.   `C_ADDRESS` varchar(100) NOT NULL COMMENT "",
  141.   `C_CITY` varchar(100) NOT NULL COMMENT "",
  142.   `C_NATION` varchar(100) NOT NULL COMMENT "",
  143.   `C_REGION` varchar(100) NOT NULL COMMENT "",
  144.   `C_PHONE` varchar(100) NOT NULL COMMENT "",
  145.   `C_MKTSEGMENT` varchar(100) NOT NULL COMMENT "",
  146.   `S_NAME` varchar(100) NOT NULL COMMENT "",
  147.   `S_ADDRESS` varchar(100) NOT NULL COMMENT "",
  148.   `S_CITY` varchar(100) NOT NULL COMMENT "",
  149.   `S_NATION` varchar(100) NOT NULL COMMENT "",
  150.   `S_REGION` varchar(100) NOT NULL COMMENT "",
  151.   `S_PHONE` varchar(100) NOT NULL COMMENT "",
  152.   `P_NAME` varchar(100) NOT NULL COMMENT "",
  153.   `P_MFGR` varchar(100) NOT NULL COMMENT "",
  154.   `P_CATEGORY` varchar(100) NOT NULL COMMENT "",
  155.   `P_BRAND` varchar(100) NOT NULL COMMENT "",
  156.   `P_COLOR` varchar(100) NOT NULL COMMENT "",
  157.   `P_TYPE` varchar(100) NOT NULL COMMENT "",
  158.   `P_SIZE` tinyint(4) NOT NULL COMMENT "",
  159.   `P_CONTAINER` varchar(100) NOT NULL COMMENT ""
  160. ) ENGINE=OLAP
  161. DUPLICATE KEY(`LO_ORDERKEY`)
  162. COMMENT "OLAP"
  163. DISTRIBUTED BY HASH(`LO_ORDERKEY`) BUCKETS 192
  164. PROPERTIES (
  165. "replication_num" = "1",
  166. "colocate_with" = "groupxx1",
  167. "in_memory" = "false",
  168. "storage_format" = "DEFAULT"
  169. );

导入数据

通过stream load

  1. #执行导入数据的脚本`
  2. bin /stream_load.sh data_dir
生成ssb单表数据
bin/flat_insert.sh

查询

单表查询

测试ssb单表查询(SQL 参见 share/ssb_test/sql/ssb-flat/)

bin/benchmark.sh -p -d ssb-flat

查询结果:

image2021-4-16_16-50-49.png
多表查询

测试ssb多表查询 (SQL 参见 share/ssb_test/sql/ssb/)

bin/benchmark.sh -p -d ssb

查询结果

image2021-4-16_17-3-4.png

Clickhouse

下载安装 dbgen

  1. git clone https://github.com/vadimtk/ssb-dbgen.git
  2. cd ssb-dbgen make

生成数据

  1. ./dbgen -s 1000 -T c 
  2. ./dbgen -s 1000 -T l 
  3. ./dbgen -s 1000 -T p 
  4. ./dbgen -s 1000 -T s 
  5. ./dbgen -s 1000 -T d

在ClickHouse中创建表

  1. CREATE TABLE test.customer(C_CUSTKEY UInt32,C_NAME String,C_ADDRESS String,C_CITY LowCardinality (String),C_NATION LowCardinality (String),C_REGION LowCardinality (String),C_PHONE String,C_MKTSEGMENT LowCardinality (String))ENGINE = MergeTree ORDER BY (C_CUSTKEY);
  2. CREATE TABLE test.lineorder (LO_ORDERKEY UInt32,LO_LINENUMBER UInt8,LO_CUSTKEY UInt32,LO_PARTKEY UInt32,LO_SUPPKEY UInt32,LO_ORDERDATE Date,LO_ORDERPRIORITY LowCardinality (String),LO_SHIPPRIORITY UInt8,LO_QUANTITY UInt8,LO_EXTENDEDPRICE UInt32,LO_ORDTOTALPRICE UInt32,LO_DISCOUNT UInt8,LO_REVENUE UInt32,LO_SUPPLYCOST UInt32,LO_TAX UInt8,LO_COMMITDATE Date,LO_SHIPMODE LowCardinality (String) ) ENGINE = MergeTree PARTITION BY toYear (LO_ORDERDATE) ORDER BY(LO_ORDERDATE, LO_ORDERKEY);
  3. CREATE TABLE test.part (P_PARTKEY UInt32,P_NAME String,P_MFGR LowCardinality (String),P_CATEGORY LowCardinality (String),P_BRAND LowCardinality (String),P_COLOR LowCardinality (String),P_TYPE LowCardinality (String),P_SIZE UInt8,P_CONTAINER LowCardinality (String) ) ENGINE = MergeTree ORDER BY P_PARTKEY;
  4. CREATE TABLE test.supplier (S_SUPPKEY UInt32,S_NAME String,S_ADDRESS String,S_CITY LowCardinality (String),S_NATION LowCardinality (String),S_REGION LowCardinality (String),S_PHONE String) ENGINE = MergeTree ORDER BY S_SUPPKEY;
  5. CREATE TABLE test.date(D_DATEKEY UInt32,D_DATE String,D_DAYOFWEEK String,D_MONTH String,D_YEAR UInt32,D_YEARMONTHNUM UInt32,D_YEARMONTH String,D_DAYNUMINWEEK UInt32,D_DAYNUMINMONTH UInt32,D_DAYNUMINYEAR UInt32,D_MONTHNUMINYEAR UInt32,D_WEEKNUMINYEAR UInt32,D_SELLINGSEASON String,D_LASTDAYINWEEKFL UInt32,D_LASTDAYINMONTHFL UInt32,D_HOLIDAYFL UInt32,D_WEEKDAYFL UInt32) ENGINE = MergeTree ORDER BY D_DATEKEY;

导入数据

clickhouse-client -h prd-worker05 --port=9002 --query "INSERT INTO test.customer FORMAT CSV" < customer.tbl clickhouse-client -h prd-worker05 --port=9002 --query "INSERT INTO test.part FORMAT CSV" < part.tbl clickhouse-client -h prd-worker05 --port=9002 --query "INSERT INTO test.supplier FORMAT CSV" < supplier.tbl clickhouse-client -h prd-worker05 --port=9002 --query "INSERT INTO test.lineorder FORMAT CSV" < lineorder.tbl clickhouse-client -h prd-worker05 --port=9002 --query "INSERT INTO test.dates FORMAT CSV" < date.tbl

将"星型模式"转换为非规范化的"平面模式"

  1. set max_memory_usage_for_all_queries=80000000000; 
  2. set max_memory_usage=80000000000; 
  3. set max_bytes_before_external_group_by=40000000000; 
  4. CREATE TABLE lineorder_flat ENGINE = MergeTree PARTITION BY toYear(LO_ORDERDATE) ORDER BY (LO_ORDERDATE, LO_ORDERKEY) AS SELECT l.LO_ORDERKEY AS LO_ORDERKEY,l.LO_LINENUMBER AS LO_LINENUMBER,l.LO_CUSTKEY AS LO_CUSTKEY,l.LO_PARTKEY AS LO_PARTKEY,l.LO_SUPPKEY AS LO_SUPPKEY,l.LO_ORDERDATE AS LO_ORDERDATE,l.LO_ORDERPRIORITY AS LO_ORDERPRIORITY,l.LO_SHIPPRIORITY AS LO_SHIPPRIORITY,l.LO_QUANTITY AS LO_QUANTITY,l.LO_EXTENDEDPRICE AS LO_EXTENDEDPRICE,l.LO_ORDTOTALPRICE AS LO_ORDTOTALPRICE,l.LO_DISCOUNT AS LO_DISCOUNT,l.LO_REVENUE AS LO_REVENUE,l.LO_SUPPLYCOST AS LO_SUPPLYCOST,l.LO_TAX AS LO_TAX,l.LO_COMMITDATE AS LO_COMMITDATE,l.LO_SHIPMODE AS LO_SHIPMODE,c.C_NAME AS C_NAME,c.C_ADDRESS AS C_ADDRESS,c.C_CITY AS C_CITY,c.C_NATION AS C_NATION,c.C_REGION AS C_REGION,c.C_PHONE AS C_PHONE,c.C_MKTSEGMENT AS C_MKTSEGMENT,s.S_NAME AS S_NAME,s.S_ADDRESS AS S_ADDRESS,s.S_CITY AS S_CITY,s.S_NATION AS S_NATION,s.S_REGION AS S_REGION,s.S_PHONE AS S_PHONE,p.P_NAME AS P_NAME,p.P_MFGR AS P_MFGR,p.P_CATEGORY AS P_CATEGORY,p.P_BRAND AS P_BRAND,p.P_COLOR AS P_COLOR,p.P_TYPE AS P_TYPE,p.P_SIZE AS P_SIZE,p.P_CONTAINER AS P_CONTAINER FROM lineorder AS l INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY;

查询:

Q1.1

SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue FROM lineorder_flat WHERE toYear(LO_ORDERDATE) = 1993 AND LO_DISCOUNT BETWEEN 1 AND 3 AND LO_QUANTITY < 25;

Q1.2

SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue FROM lineorder_flat WHERE toYYYYMM(LO_ORDERDATE) = 199401 AND LO_DISCOUNT BETWEEN 4 AND 6 AND LO_QUANTITY BETWEEN 26 AND 35;

Q1.3

  1. SELECT sum(LO_EXTENDEDPRICE * LO_DISCOUNT) AS revenue
  2. FROM lineorder_flat
  3. WHERE toISOWeek(LO_ORDERDATE) = 6 AND toYear(LO_ORDERDATE) = 1994
  4.   AND LO_DISCOUNT BETWEEN 5 AND 7 AND LO_QUANTITY BETWEEN 26 AND 35;

Q2.1

  1. SELECT
  2.    sum(LO_REVENUE),
  3.    toYear(LO_ORDERDATE) AS year,
  4.    P_BRAND
  5. FROM lineorder_flat
  6. WHERE P_CATEGORY = 'MFGR#12' AND S_REGION = 'AMERICA'
  7. GROUP BY
  8.     year,
  9.    P_BRAND
  10. ORDER BY
  11.     year,
  12.    P_BRAND;

Q2.2

  1. SELECT
  2.    sum(LO_REVENUE),
  3.    toYear(LO_ORDERDATE) AS year,
  4.    P_BRAND
  5. FROM lineorder_flat
  6. WHERE P_BRAND >= 'MFGR#2221' AND P_BRAND <= 'MFGR#2228' AND S_REGION = 'ASIA'
  7. GROUP BY
  8.     year,
  9.    P_BRAND
  10. ORDER BY
  11.     year,
  12.    P_BRAND;

Q2.3

  1. SELECT
  2.    sum(LO_REVENUE),
  3.    toYear(LO_ORDERDATE) AS year,
  4.    P_BRAND
  5. FROM lineorder_flat
  6. WHERE P_BRAND = 'MFGR#2239' AND S_REGION = 'EUROPE'
  7. GROUP BY
  8.     year,
  9.    P_BRAND
  10. ORDER BY
  11.     year,
  12.    P_BRAND;

Q3.1

  1. SELECT
  2.    C_NATION,
  3.    S_NATION,
  4.    toYear(LO_ORDERDATE) AS year,
  5.    sum(LO_REVENUE) AS revenue
  6. FROM lineorder_flat
  7. WHERE C_REGION = 'ASIA' AND S_REGION = 'ASIA' AND year >= 1992 AND year <= 1997
  8. GROUP BY
  9.    C_NATION,
  10.    S_NATION,
  11.     year
  12. ORDER BY
  13.     year ASC,
  14.    revenue DESC;

Q3.2

  1. SELECT
  2.    C_CITY,
  3.    S_CITY,
  4.    toYear(LO_ORDERDATE) AS year,
  5.    sum(LO_REVENUE) AS revenue
  6. FROM lineorder_flat
  7. WHERE C_NATION = 'UNITED STATES' AND S_NATION = 'UNITED STATES' AND year >= 1992 AND year <= 1997
  8. GROUP BY
  9.    C_CITY,
  10.    S_CITY,
  11.     year
  12. ORDER BY
  13.     year ASC,
  14.    revenue DESC;

Q3.3

  1. SELECT
  2.    C_CITY,
  3.    S_CITY,
  4.    toYear(LO_ORDERDATE) AS year,
  5.    sum(LO_REVENUE) AS revenue
  6. FROM lineorder_flat
  7. WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND year >= 1992 AND year <= 1997
  8. GROUP BY
  9.    C_CITY,
  10.    S_CITY,
  11.     year
  12. ORDER BY
  13.     year ASC,
  14.    revenue DESC;

Q3.4

  1. SELECT
  2.    C_CITY,
  3.    S_CITY,
  4.    toYear(LO_ORDERDATE) AS year,
  5.    sum(LO_REVENUE) AS revenue
  6. FROM lineorder_flat
  7. WHERE (C_CITY = 'UNITED KI1' OR C_CITY = 'UNITED KI5') AND (S_CITY = 'UNITED KI1' OR S_CITY = 'UNITED KI5') AND toYYYYMM(LO_ORDERDATE) = 199712
  8. GROUP BY
  9.    C_CITY,
  10.    S_CITY,
  11.     year
  12. ORDER BY
  13.     year ASC,
  14.    revenue DESC;

Q4.1

  1. SELECT
  2.    toYear(LO_ORDERDATE) AS year,
  3.    C_NATION,
  4.    sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
  5. FROM lineorder_flat
  6. WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
  7. GROUP BY
  8.     year,
  9.    C_NATION
  10. ORDER BY
  11.     year ASC,
  12.    C_NATION ASC;

Q4.2

  1. SELECT
  2.    toYear(LO_ORDERDATE) AS year,
  3.    S_NATION,
  4.    P_CATEGORY,
  5.    sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
  6. FROM lineorder_flat
  7. WHERE C_REGION = 'AMERICA' AND S_REGION = 'AMERICA' AND (year = 1997 OR year = 1998) AND (P_MFGR = 'MFGR#1' OR P_MFGR = 'MFGR#2')
  8. GROUP BY
  9.     year,
  10.    S_NATION,
  11.    P_CATEGORY
  12. ORDER BY
  13.     year ASC,
  14.    S_NATION ASC,
  15.    P_CATEGORY ASC;

Q4.3

  1. SELECT
  2.    toYear(LO_ORDERDATE) AS year,
  3.    S_CITY,
  4.    P_BRAND,
  5.    sum(LO_REVENUE - LO_SUPPLYCOST) AS profit
  6. FROM lineorder_flat
  7. WHERE S_NATION = 'UNITED STATES' AND (year = 1997 OR year = 1998) AND P_CATEGORY = 'MFGR#14'
  8. GROUP BY
  9.     year,
  10.    S_CITY,
  11.    P_BRAND
  12. ORDER BY
  13.     year ASC,
  14.    S_CITY ASC,
  15.    P_BRAND ASC;

查询结果

单表查询结果

img
多表查询结果


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26692020/viewspace-3148386/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
大家好

注册时间:2013-08-14

  • 博文量
    1432
  • 访问量
    31638