zoukankan      html  css  js  c++  java
  • 数据库学习3 Distinct Group By

    1 Distinct 的作用范围

    下面先来看看例子:

    id name
    1 a
    2 b
    3 c
    4 c
    5 b

    库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。

    比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录。

    select distinct name from table

    得到的结果是:


    name
       a
       c

    好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧:

    select distinct name, id from table

    结果会是:


    id   name
       1 a
       2 b
       3 c
       4 c
       5 b

    distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除

    我们再改改查询语句:

    select id, distinct name from table

    很遗憾,除了错误信息你什么也得不到,distinct必须放在开头。难到不能把distinct放到where条件里?能,照样报错。


    下面方法可行:

    select *, count(distinct name) from table group by name

    结果:

       id name count(distinct name)
       1   a            1
       2   b            1
       3   c            1

    最后一项是多余的,不用管就行了,目的达到

    Sql Distinct知多少

    group by 必须放在 order by 和 limit之前,不然会报错:

    2 Group By 和 Having, Where ,Order by语句的执行顺序:

    说明一下的Group By, Having, Where, Order by几个语句的执行顺序。一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。

    以上列举的关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数),然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组,接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉,然后按照Order By语句对视图进行排序,这样最终的结果就产生了。在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:

    SELECT FruitName,ProductPlace,Price,ID AS IDE,Discount
    FROM T_TEST_FRUITINFO
    WHERE (ProductPlace=N'china')
    ORDER BY IDE

    这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。

    GROUP BY 总结
    SQL中GROUPBY的使用

    3 join中on与where

    left join on 和where条件的放置, left join 失效问题

  • 相关阅读:
    Apache Kylin1.5.2.1之订单案例详细构建流程
    全网最详细Apache Kylin1.5安装(单节点)和测试案例
    Kylin介绍
    类型本质---进阶编程篇(二)
    运行机制---进阶编程篇(一)
    前言---进阶编程篇(零)
    穆里尼奥:伊布居然没得过金球奖
    htmlUnit加持,网络小蜘蛛的超级进化
    formData批量上传的多种实现
    自定义input文件上传样式
  • 原文地址:https://www.cnblogs.com/bishi/p/5699013.html
Copyright © 2011-2022 走看看