山东青岛电脑学校 专业软件工程师培训,软件人才就业实训中心0532-85025005

PostgreSQL的最佳特性 你用了吗?

 
SQL语句通常不是很容易理解,特别是你阅读别人已经写好的语句。因此,很多人指出我们应该遵循在其他语言中遵循的原则,像加上注释和功能模块化。 我最新注意到一个很多人都没有使用的Postgres关键特性,也就是 @timonk在AWS Re:Invent 大会关于数据仓库服务Redshift主题演讲时指出的一个特性。这个特性实际上使得SQL兼具了可读性和模块性。在以前,我回头阅读自己的几个月前的 SQL语句,通常很难理解,而现在我可以做到这一点。
这个特性就是CTEs,也就是公用表表达式,你有可能称做它为WITH 语句。和数据库中视图一样,它的主要好处就是,它允许你在当前事务中创建临时表。你可以大量使用它,因为它允许你思路清晰的构建模块,别人很容易就理解你在做什么。
让我们举个简单的例子
WITH users_tasks AS ( 
  SELECT 
         users.email, 
         array_agg(tasks.name) as task_list, 
         projects.title 
  FROM 
       users, 
       tasks, 
       project 
  WHERE 
        users.id = tasks.user_id 
        projects.title = tasks.project_id 
  GROUP BY 
           users.email, 
           projects.title 

通过这样定义临时表users_tasks,我就可以在后面加上对users_tasks基本查询语句,像:
SELECT * 
FROM users_tasks; 
有趣的是你可以将它们连在一起。当我知道分配给每个用户的任务量时,也许我想知道在一个指定的任务上,谁因为对这个任务负责超过了50%而因此造成瓶颈。为了简化,我们可以使用多种方式,先计算每个任务的总量,然后是每人针对每个任务的负责总量。
total_tasks_per_project AS ( 
  SELECT 
         project_id, 
         count(*) as task_count 
  FROM tasks 
  GROUP BY project_id 
), 
  
tasks_per_project_per_user AS ( 
  SELECT 
         user_id, 
         project_id, 
         count(*) as task_count 
  FROM tasks 
  GROUP BY user_id, project_id 
), 
现在我们将组合一下然后发现超过50%的用户
overloaded_users AS ( 
  SELECT tasks_per_project_per_user.user_id, 
  
  FROM tasks_per_project_per_user, 
       total_tasks_per_project 
  WHERE tasks_per_project_per_user.task_count > (total_tasks_per_project / 2) 

最终目标,我想获得超负荷工作这的用户和任务的逗号分隔列表。我们只要简单地对overloaded_users和 users_tasks的初始列表进行join操作。放在一起可能有点长,但是可读性强。作为额外帮助,我又在每一层加了注释。
--- Created by Craig Kerstiens 11/18/2013 
--- Query highlights users that have over 50% of tasks on a given project 
--- Gives comma separated list of their tasks and the project 
  
--- Initial query to grab project title and tasks per user 
WITH users_tasks AS ( 
  SELECT 
         users.id as user_id, 
         users.email, 
         array_agg(tasks.name) as task_list, 
         projects.title 
  FROM 
       users, 
       tasks, 
       project 
  WHERE 
        users.id = tasks.user_id 
        projects.title = tasks.project_id 
  GROUP BY 
           users.email, 
           projects.title 
), 
  
--- Calculates the total tasks per each project 
total_tasks_per_project AS ( 
  SELECT 
         project_id, 
         count(*) as task_count 
  FROM tasks 
  GROUP BY project_id 
), 
  
--- Calculates the projects per each user 
tasks_per_project_per_user AS ( 
  SELECT 
         user_id, 
         project_id, 
         count(*) as task_count 
  FROM tasks 
  GROUP BY user_id, project_id 
), 
  
--- Gets user ids that have over 50% of tasks assigned 
overloaded_users AS ( 
  SELECT tasks_per_project_per_user.user_id, 
  
  FROM tasks_per_project_per_user, 
       total_tasks_per_project 
  WHERE tasks_per_project_per_user.task_count > (total_tasks_per_project / 2) 

  
SELECT 
       email, 
       task_list, 
       title 
FROM 
     users_tasks, 
     overloaded_users 
WHERE 
      users_tasks.user_id = overloaded_users.user_id 
CTEs通常不如经过精简优化过的SQL语句性能高。大多数差距小于一倍差距。对我而言,这种为了可读性作出的折中是毋庸置疑的。Postgres优化器以后肯定会针对这点变的更好。

Tags: 青软培训 java

发布: 郑老师 分类: 电脑培训行业资讯 评论: 0 浏览: 71

Java培训后就业怎么样?

随着我国高校毕业生就业人数高峰期的到来和岗位结构矛盾的突出,2013年成为大学生“史上最难就业年”,面对短期内难以扭转的困局,许多曾以“100%就业率”而风光的名牌大学开始变的“低调”。

java培训有必要参加吗?

java培训有必要参加吗?

人才瓶颈。”北京市发展改革委高新处处长陈双说,北京市提出以高端产业发展凝聚高端人才。以高端产业为核心,加大高技术研发人才、高技能生产人才和高层次管理人才的培养。采取团队引进、项目引进的方式吸引国内外高技术人才。

Java行业的就业率和发展钱途

2013年,大学生就业压力严峻,很多大学生找不到一份理想的工作。随着IT行业的发展,出现了Java工程师的稀缺,由于Java软件工程师的高收入,越来越多人把目光投向了软件开发上面,希望在IT行业找到一份高收入的工作。

Java的发展以及应用前景

软件开发行业有这么一句话,每10年~15年有一次轮回,现在的轮回就是java。他已经成为当今社会最热门的一种语言,有着广泛的应用进而巨大的前景。

学Java到青岛青软java培训

学Java快速渠道?想做Java开发必须要参加培训吗?

  是啊,在大学里学的课程有点泛泛,想做IT这样的对技术要求比较专业的工作,就必须参加个相关Java培训,现在在全国各地有那么多大学生在学习,各省市的Java开发软件公司对Java招聘人才很缺,

为什么这么多人学习Java和Android

自google收购Android之后,Android开发者更是风生水起。Android系统已成为三星、HTC、等众多手机的首选操作系统平台,众多的Android应用也成为移动互联网庞大的超级市场。Android开发前景看好,Android手机市场大卖,Android应用人气火爆,Android程序员也待遇渐长。

Java软件开发的就业市场的前景

 软件业的发展关系到一个国家的政治和未来,软件产业已成为21世纪拥有最大产业规模和最具广阔前景的新兴产业之一。根据权威部门提供的数据,在技术领域,企业对IT软件工程师的需求仍然高居榜首,而且薪酬待遇不薄。

学java还是学Ios、android ?

经常有同学会提出这样的疑问:我是报android培训班呢还是报ios培训班?我是报java培训呢还是报android培训班呢?这类问题已经成为困扰许多报班者的难题,很多学生很难准确的理解和区分这几种编程技术的区别,更何况要选择一个作为前途!然而,鱼与熊掌,不可兼得。对于迫切渴望就业的人来说,快速准确的做好选择,变得尤为重要。

Tags: java Android

发布: 郑老师 分类: 电脑培训行业资讯 评论: 0 浏览: 34