Navicat使用教程:获取MySQL中的高级行数(第2部分)

  Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。
  
  在上篇文章中,我们使用了原生COUNT()函数的不同变体来计算一个MySQL表中的行数。在这篇文章中,我们将以更复杂的方式使用COUNT()函数来计算唯一值以及满足条件的值。
  
  不同计数
  
  COUNT(DISTINCT)函数返回具有唯一非空值的行数。因此,包含DISTINCT关键字将从计数中删除重复的行。它的语法是:
  
  1
  
  COUNT(DISTINCT expr,[expr...])
  
  与常规COUNT()函数一样,上面的expr参数可以是任何给定的表达式,包括特定的列、所有列(*)、函数返回值或表达式(如IF/CASE 语句)。
  
  一个简单的例子
  
  假设我们有下表的客户:
  
  +------------+-------------+
  
  | last_name | first_name |
  
  +------------+-------------+
  
  | Tannen | Biff |
  
  +------------+-------------+
  
  | McFly | Marty |
  
  +------------+-------------+
  
  | Brown | Dr. Emmett |
  
  +------------+-------------+
  
  | McFly | George |
  
  +------------+-------------+
  
  调用COUNT(*)将返回所有行的数目(4),而姓氏上的非重复计数将把姓氏重复的每一行计数为1,这样我们得到的总数为3:
  
  SELECT COUNT(*), COUNT(DISTINCT last_name) FROM clients;
  
  +----------+---------------------------+
  
  | COUNT(*) | COUNT(DISTINCT last_name) |
  
  +----------+---------------------------+
  
  | 4 | 3 |
  
  +----------+---------------------------+
  
  使用表达式的条件计数
  
  如上所述,COUNT()函数参数不限于列名;函数返回值和表达式(如IF/CASE 语句)也是公平的。
  
  这是一个包含多个用户电话号码和性别的表(为了简单起见,限制为两个):
  
  +------------+---------+
  
  | tel | sex |
  
  +------------+---------+
  
  | 7136609221 | male |
  
  +------------+---------+
  
  | 7136609222 | male |
  
  +------------+---------+
  
  | 7136609223 | female |
  
  +------------+---------+
  
  | 7136609228 | male |
  
  +------------+---------+
  
  | 7136609222 | male |
  
  +------------+---------+
  
  | 7136609223 | female |
  
  +------------+---------+
  
  假设我们想要构建一个查询,告诉我们表中有多少不同的男女。该人员通过其电话('tel')号码进行识别。同一个“tel”可能出现多次,但该tel的性别只应计算一次。
  
  这里有一个选项,对每列使用不同的计数:
  
  SELECT COUNT(DISTINCT tel) gender_count,
  
  COUNT(DISTINCT CASE WHEN gender = 'male' THEN tel END) male_count,
  
  COUNT(DISTINCT CASE WHEN gender = 'female' THEN tel END) female_count
  
  FROM people
  
  此SELECT语句将生成以下内容:
  
  +--------------+------------+---------------+
  
  | gender_count | male_count | female_count |
  
  +--------------+------------+---------------+
  
  | 4 | 3 | 1 |
  
  +--------------+------------+---------------+
  
  分组并包括总计
  
  还可以使用GROUP BY垂直堆叠计数:
  
  export default new Router({
  
  routes: [
  
  ......
  
  ],
  
  scrollBehavior (to, from, savedPosition) {
  
  // console.log(to) // to:要进入的目标路由对象,到哪里去
  
  // console.log(from) // from:离开的路由对象,哪里来
  
  // console.log(savedPosition) // savePosition:会记录滚动条的坐标
  
  if(savedPosition) {
  
  return savedPosition;
  
  }else{
  
  return {x:0,y:0}
  
  }
  
  }
  
  })
  
  复制代码
  
  三.Cookie储存
  
  1.建立一个cookieUtil.js的文件
  
  复制代码
  
  //设置cookie
  
  export function setCookie(key,value) {
  
  var Days = 0.6;
  
  var exdate = new Date(www.michenggw.com); //获取时间
  
  exdate.setTime(exdate.getTime() + Days*24*60*60*1000); //保存的天数
  
  //字符串拼接cookie
  
  window.document.cookie = key + "=" + value + ";path=/;expires=" + exdate.toGMTString();
  
  };
  
  //读取cookie
  
  export function getCookie(param) {
  
  var c_param = '';
  
  if (document.cookie.length www.dasheng178.com> 0) {
  
  var arr = document.cookie.www.mcyllpt.com split('; '); //这里显示的格式需要切割一下自己可输出看下
  
  for (var i = 0; i < arr.length; i++) {
  
  var arr2 = arr[i].split('='); //再次切割
  
  //判断查找相对应的值
  
  if (arr2[0] == param) {
  
  c_param = arr2[1];
  
  //保存到保存数据的地方
  
  }
  
  }
  
  return c_param;
  
  }
  
  };
  
  function padLeftZero www.fengshen157.com/(str) {
  
  return ('00' + str).substr(str.length);
  
  };
  
  +---------+-------+
  
  | GroupId | Count |
  
  +---------+-------+
  
  | 1 | 5 |
  
  +---------+-------+
  
  | 2 | 4 |
  
  +---------+-------+
  
  | 3 | 7 |
  
  +---------+-------+
  
  | Total: | 11 |
  
  +---------+-------+
  
  “total:”是使用SQL GROUPING()函数生成的,该函数添加在MySQL 8.0.1中。它将表示超级聚合行(由汇总生成)中所有值的集合的空值与常规行中的空值区分开来。
  
  以下是完整的SQL:
  
  Select Case When Grouping(GroupId) = 1
  
  Then 'Total:'
  
  Else GroupId
  
  End As GroupId,
  
  Count(*) Count
  
  From user_groups
  
  Group By GroupId With Rollup
  
  Order By Grouping(GroupId), GroupId
  
  下篇文章,我们将从多个表和视图中获取行计数。

上一篇:php代码审计7审计csrf漏洞


下一篇:Javascript事件设计模式(七)