`

分享以前笔试java程序员时的数据库部分的题目

阅读更多

分享以前笔试java程序员时的数据库部分的题目

" 疯狂Java联盟" 有一宗旨是“分享”,那我也与大家分享一点我曾经的面试题吧!我是用mysql做的,也欢迎大家用其他数据库,如oracle等。呵呵....为了抛砖引 玉,献丑一回了.... 1至5题我只是实现并未考虑效率问题,第6题未做.......也请大家补充及斧正
---------------------------------------------

销售流水表(sale_records)
Trace_id      number(10)   交易编号(惟一)
Trace_time    date         交易时间
Sales_id      number(10)   销售人员编号
Branch_id     number(10)   分店编号
Trace_type    number(4)    交易类型(1现金,2信用卡,3优惠券)
Total_amount  number(8)    交易金额

每天300 ~ 400 万记录,所有字段不为空

1.提取2007-8-8交易次数和交易总金额

  交易数  交易总金额


select count(Trace_id) as 交易次数,sum(Total_amount) as 交易总金额
from sale_records
where Trace_time='2007-8-8';
如:
+----------+------------+
| 交易次数 | 交易总金额 |
+----------+------------+
|       14 |      32200 |
+----------+------------+

2.提取2007-8-8,3种付款方式对应的交易次数和交易金额

  现金交易次数 现金交易金额  信用卡交易次数  信用卡交易金额

方法1
select count(Trace_id) as 现金交易次数,sum(Total_amount) as 现金交易金额
from sale_records
where Trace_type=1
union all
select count(Trace_id) as 信用卡交易次数,sum(Total_amount) as 信用卡交易金额
from sale_records
where Trace_type=2;
如:
+--------------+--------------+
| 现金交易次数 | 现金交易金额 |
+--------------+--------------+
|           10 |        28000 |
|            3 |         3200 |
+--------------+--------------+
方法2
select 现金交易次数, 现金交易金额,信用卡交易次数,信用卡交易金额
from
(
select Sales_id, count(Trace_id) as 现金交易次数,sum(Total_amount) as 现金交易金额
from sale_records
where Trace_type=1
)type1,
(
select Sales_id, count(Trace_id) as 信用卡交易次数,sum(Total_amount) as 信用卡交易金额
from sale_records
where Trace_type=2
)type2
where type1.Sales_id=type2.Sales_id;
如:
+--------------+--------------+----------------+----------------+
| 现金交易次数 | 现金交易金额 | 信用卡交易次数 | 信用卡交易金额 |
+--------------+--------------+----------------+----------------+
|           10 |        28000 |              3 |           3200 |
+--------------+--------------+----------------+----------------+




3.提取2007-8-8 销售次数排前 10 销售人员编号和交易次数

  销售人员编号  交易数


select Sales_id as 销售人员编号,count(Trace_id) as 交易数
from sale_records group by Sales_id having Sales_id order by count(Trace_id) desc;
取出来的是排序的统计
+--------------+--------+
| 销售人员编号 | 交易数 |
+--------------+--------+
|        56001 |     10 |
|        56002 |      2 |
|        56003 |      2 |
+--------------+--------+
(mysql中,因为mysql不支持top,故用limit代替)
select Sales_id as 销售人员编号,count(Trace_id) as 交易数
from sale_records group by Sales_id having Sales_id order by count(Trace_id) desc limit 2;
如:
+--------------+--------+
| 销售人员编号 | 交易数 |
+--------------+--------+
|        56001 |     10 |
|        56002 |      2 |
+--------------+--------+  




4.提取2007-8-8 分店的销售金额超过10000的分店编号及交易金额

  分店编号  交易金额

  select Branch_id as 分店编号,sum(Total_amount) as 交易金额
  from sale_records
  group by Branch_id
  having sum(Total_amount)>10000;
如:

+----------+----------+
| 分店编号 | 交易金额 |
+----------+----------+
|     1001 |    19200 |
|     1002 |    13000 |
+----------+----------+

5.提取2007-8-8 分店号1001、1002的交易,交易金额分别是0-99、100-299、300以上的交易次数

  分店编号  0-99交易次数   100-299交易次数  300交易次数


select 分店编号,千元的交易次数,千元至千二元的交易次数 from
(
select Branch_id as 分店编号,count(Trace_id) as 千元的交易次数 from sale_records
where Total_amount=1000
   group by Branch_id
   having Branch_id in (1001,1002)
)q1,
(
select Branch_id as 分店编号2,count(Trace_id) as 千元至千二元的交易次数 from sale_records
where Total_amount>=1000 and Total_amount<=1200
   group by Branch_id
   having Branch_id in (1001,1002)
)q2 where q1.分店编号=q2.分店编号2;

如:
+----------+----------------+------------------------+
| 分店编号 | 千元的交易次数 | 千元至千二元的交易次数 |
+----------+----------------+------------------------+
|     1001 |              8 |                      9 |
|     1002 |              3 |                      3 |
+----------+----------------+------------------------+


6、优化上表(可添加索引,则 sql 语句有何改变等)







--------------------------------
初始数据
--------------------------------
mysql 数据库

create database if not exists sale;
use sale;
create table sale_records
(
  Trace_id      int(10)   primary key   auto_increment,
  Trace_time    date,     
  Sales_id      int(10),
  Branch_id     int(10),
  Trace_type    int(4),
  Total_amount  int(8)
);
alter table sale_records auto_increment=1005600001;
insert into sale_records values(null,'2007-8-8',56001,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,2,1200);
insert into sale_records values(null,'2007-8-8',56002,1002,1,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,2,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56003,1002,2,1000);
insert into sale_records values(null,'2007-8-8',56003,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56002,1002,3,1000);
insert into sale_records values(null,'2007-8-8',56001,1001,1,1000);
insert into sale_records values(null,'2007-8-8',56001,1002,1,10000);
insert into sale_records values(null,'2007-8-8',56001,1001,1,10000);

select * from sale_records;
分享到:
评论

相关推荐

    Java程序员面试笔试宝典

    《Java程序员面试笔试宝典》是一本专门为寻求Java相关职位的程序员准备的参考资料,它涵盖了Java编程语言的基础、进阶以及面试中常见的问题和考点。这本书的高清版旨在提供清晰易读的学习体验,帮助读者更好地理解和...

    华为面试题目java程序员该看看

    Java程序员在面试华为时,需要对Java语言有深入的理解,并具备扎实的基础知识。这份压缩包文件"huawei"很可能是包含了一系列华为针对Java程序员的面试题目,这些题目旨在考察候选人的编程技能、问题解决能力以及对...

    java程序员面试题集和部分外企笔试真题总结

    这份资料集合了“java程序员面试题集”和“部分外企笔试真题总结”,是准备Java技术面试和外企笔试的宝贵资源。以下将针对这两个核心内容展开详细的解析。 首先,Java程序员面试题集通常涵盖了以下几个方面的知识:...

    java程序员笔试题目。

    【Java程序员笔试题目详解】 一、计算题 ( 32 * 444 + 8 * 999 ) * ( 193 * 50 + 350) 这是一个基本的数学计算题,涉及到乘法和加法运算。我们可以按照数学中的运算顺序来计算: 首先计算括号内的乘法: 32 * ...

    农行Java笔试题

    【标题】"农行Java笔试题"涉及到的Java知识点涵盖了编程基础、面向对象特性、集合框架、多线程、异常处理、IO流、网络编程、数据库操作等多个领域,这些都是Java程序员必须掌握的核心技能。 首先,从编程基础角度来...

    java程序员关于SQL部分面试常考笔试题

    ### Java程序员关于SQL部分面试常考笔试题解析 #### 触发器的作用 触发器是一种特殊的存储过程,其主要功能是通过数据库中的特定事件(如插入、更新或删除记录等)来自动执行预定义的动作。触发器的主要作用包括:...

    Java程序员面试宝典.pdf

    ### Java程序员面试宝典知识点概览 #### 一、唯一性——聚焦Java程序员求职面试技巧 **《Java程序员面试宝典》**之所以独具特色,在于它是国内市场上唯一一本专门针对Java程序员求职面试技巧的图书。这本宝典不仅...

    香港JAVA面试笔试题目

    香港的JAVA程序员面试笔试题目可能涵盖以下几个关键领域: 1. **基础语法**:面试可能会开始于一些基本的语法问题,如类、对象、封装、继承、多态等概念。此外,接口、抽象类的区别及其使用场景也是常见的面试题。 ...

    Java程序员需要的面试笔试题目

    Java程序员在面试或笔试中可能遇到的技术问题涵盖了各种领域,如Java Applet的调试、JDBC数据交互、Servlet处理HTTP请求以及Web服务器的配置。以下是对这些知识点的详细解释: 1. **Java Applet调试**: 当Java ...

    java程序员考试题库

    ### Java程序员考试题库知识点详解 #### 一、基础知识练习概览 本章节涵盖了Java的基础知识,主要包括Java入门、数据类型和运算符等关键概念。这些知识点对于初学者来说至关重要,同时也是进阶学习的重要基石。 #...

    Java程序员应该了解的知识及一些公司的面试题目(供初学者参考以及程序员复习使用)

    本资源集合了Java程序员应该了解的关键知识点,并提供了一些知名公司的面试题目,旨在帮助初学者巩固基础,同时为有经验的程序员提供复习材料。 首先,让我们探讨Java的基础知识。Java是一种面向对象的语言,它的三...

    Java程序员面试笔试题

    Java程序员在面试和笔试过程中,会遇到各种技术性问题,这些题目主要涵盖了Java语言的核心特性、面向对象编程、集合框架、多线程、异常处理、IO流、网络编程、数据库操作以及SQL语句等关键领域。以下是对这些知识点...

    java程序员面试笔试宝典-何昊

    Java程序员面试笔试宝典是为准备Java开发职位面试的求职者提供的一份全面参考资料,由何昊编写。这本书涵盖了Java编程语言的核心概念、高级特性、数据结构与算法、设计模式、多线程、网络编程、数据库操作等多方面的...

    Java程序员面试宝典+笔试题(最新)

    这份“Java程序员面试宝典+笔试题(最新)”显然是一份集合了诸多知名IT企业内部面试题目的精华资源,对于提升Java开发者的技术素养和面试成功率具有极大的价值。 首先,Java面试的核心部分通常包括以下几个关键...

    Java程序员常见笔试题分析

    Java程序员在求职过程中,面试和笔试是必不可少的环节。这些环节旨在评估候选人的技术实力、问题解决能力以及对基础知识的掌握程度。"Java程序员常见笔试题分析"这一主题,主要涵盖了Java编程语言的基础知识、进阶...

    java程序员笔试资料

    【Java程序员笔试资料详解】 Java作为一门广泛使用的编程语言,其笔试题目往往涵盖了许多核心概念和技术。以下是对标题和描述中提及的知识点的详细说明: 1. **面向对象的特征**: - **抽象**:抽象是将复杂问题...

    Java常见笔试、面试题目深度剖析

    理解这些概念是成为合格Java程序员的基础。 2. **面向对象**:Java是一种面向对象的语言,重点理解类、对象、接口、抽象类等概念,以及它们之间的关系和用法。同时,了解构造函数、方法重载、重写,以及访问修饰符...

    Java程序员面试笔试真题与解析

    Java程序员在求职过程中,面试和笔试是至关重要的环节。这些环节不仅测试了候选人的基础知识,还考察了他们的实际编程能力和问题解决技巧。本资料“Java程序员面试笔试真题与解析”旨在帮助准备面试的程序员更好地...

    java程序员笔试题

    2. **Java数据库访问包**:`java.sql`包提供了用于连接和操作数据库的类和接口,包括`Connection`、`Statement`、`ResultSet`等,使得Java程序能够轻松地与数据库进行交互。 ### 三、循环与条件控制 3. **Do-While...

    java面试笔试资料java笔试题大集合及答案题库java笔试题汇总资料188个合集.zip

    Java程序员们最常犯的10个错误.docx java程序员的就业指导(重点).docx Java程序员面试宝典 .pdf java笔试题大集合及答案 Java经典项目集锦.rar JAVA编程题全集(100题及答案).doc Java面试文档题库 Java面试笔试题库....

Global site tag (gtag.js) - Google Analytics