mysql

1.   substring_index(str,delim,count)

      str  表示要处理的字符串

      delim  表示分隔符

      count  计数

      select    substring_index(us.profile,',',-1) as gender,

                   count(*) as number

      from    user_submit us

      group by gender;

      比较count(*)和count(字段名)的区别:

                  前者对行的数目进行计算,包含null,

                 后者对特定的列的值具有的行数进行计算,不包含null,得到的结果将是除去值为null和重复数据后的结果。

 

2.  

      select difficult_level,
      (sum(case when qpd.result = right then 1 else 0 end)/count(u.answer_cnt)) as correct_rate   
      from user_profile u inner join question_practice_detail qpd on u.device_id = qpd.device_id
      inner join question_detail qd on qd.question_id = qpd.question_id
      where university = 浙江大学
      group by difficult_level
      order by correct_rate;

  (sum(case when qpd.result = right then 1 else 0 end)/count(u.answer_cnt)) as correct_rate   正确率 = 正确的个数/总答题个数

  sum(case when qpd.result = right then 1 else 0 end)  sum表示计算和 当result=right时为1  否则为0

  user_profile u inner join question_practice_detail qpd on u.device_id = qpd.device_id  inner join question_detail qd on qd.question_id = qpd.question_id   三张表之间连接inner join

 

3. 

      select device_id,gpa,age
      from user_profile
      order by gpa ,age

先按照业绩进行升序排序,再按照年龄进行升序排序

     select device_id,gpa,age
     from user_profile
    order by gpa desc,age desc

先按照业绩进行降序排序,再按照年龄进行降序排序

 

4.  

        CASE 测试表达式
        WHEN 简单表达式1 THEN 结果表达式1
        WHEN 简单表达式2 THEN 结果表达式2 …
        WHEN 简单表达式n THEN 结果表达式n
        [ ELSE 结果表达式n+1 ]
        END

   

      select (case when age >= 25 then 25岁及以上 else 25岁以下 end) as age_cnt,    当年龄大于25等于25时,显示为25岁及以上,否则显                                                                                                                                                示为25岁以下
      count(*) as number
      from user_profile
      group by age_cnt

5.  mysql语句的优先级

      首先要选定需要操作的表   from  / jion on / inner join

     确定操作过滤的条件   where/  and /or

     以何种方式展示数据   group by / having

     确定操作方式  select

     确定展示顺序  order by

     截取展示  limit

6. 表之间的连接

  

1.  Inner Join

     SELECT * FROM a INNER JOIN b ON a.`name` = b.`name` 显示结果为a表和b表的交集部分:

 

 2.  LEFT OUTER JOIN

      SELECT * FROM a LEFT OUTER JOIN b ON a.`name` = b.`name`显示结果为a的全部值,b表中匹配的则显示不匹配的则显示null:

3. 

     RIGHT OUTER JOIN

     SELECT * FROM a RIGHT OUTER JOIN b ON a.`name` = b.`name`显示结果为b的全部值,a表中匹配的则显示不匹配的则显示null:

4.  

  UNION

  注意:UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。

  同时,每条 SELECT 语句中的列的顺序必须相同。UNION 只选取记录,而UNION ALL会列出所有记录。

  SELECT name FROM a UNION SELECT name FROM b显示a表和b表中所有内容,相同内容只显示一次:

5.

   UNION ALL

  SELECT name FROM a UNION ALL SELECT name FROM b显示a表和b表中所有内容: