例表如下:

表名:MYTEST

TID    COL1    COL2     COL3

1           1           A            A

2           1           A            A

3           2           A            A

4           2           B            A

5           3           B            B

6           3           B            B

7           4           C            B

8           4           C            B

9           1           A            A

10         2           B            A

1查找表中的一个字段,重复的只找一个:

SELECT DISTINCT COL1 FROM MYTEST;

2查找表中的多个字段,其中某个字段不重复:

SELECT * FROM MYTEST WHERE rowid IN (SELECT    min(rowid) FROM MYTEST GROUP BY COL1);

重点:select * from 表 where 列ID in (select min(列id) from 表 group by 不想重复的列名)

结果为:

1           1           A            A

3           2           A            A

5           3           B            B

7           4           C            B

其中rowid为oracle中的虚拟column用来指向表中一个row的存放地址,改为其它的不能运行(这样理解不知对不对?哪位朋友有更好的理解请给我留言)

min方法若改为max时结果如下:

6          3          B          B

8          4          C          B

9          1          A          A

10        2          B          A

3查询并统计该字段的数量

SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;

结果为:

1          3

2          3

3          2

4          2

GROUP BY 哪个字段只能查找哪个字段和该字段的数量若要同时搜索其它字段就报错

即:

语句若改成    SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;

或    SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就会报错

原因可能是:搜索的结果是一组组的数据在每一组数据中,COL2有很多,所以不能搜索出唯一的一个值(这样理解不知对不对?哪位朋友有更好的理解请给我留言)

4从两个表中查询并统计数据

表T_OVERTIME字段

int tid = 0;//加班代码

float days = 0;//工日数

表T_OVERTIMEPERSONNEL字段

int tid = 0;//加班人员代码

int overtimeid = 0;//加班代码

int userid=0;//用户ID

统计每个用户的加班工日数

SELECT b.userid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY b.userid

5按多个字段分组并统计

SELECT COL1, COL2, COUNT(*) AS Expr1

FROM mytest

GROUP BY COL1, COL2

结果为:

COL1    COL2    COUNT

1           A           3

2           A           1

2          B           2

3           B           2

4           C           2

即按COL1, COL2分组后COL1, COL2的内容和每组中记录的数量

若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1

FROM mytest

GROUP BY COL1, COL2

结果为:

COL1    COL2    COUNT

1           A           1

2           A           1

2          B           1

3           B           1

4           C           1

若将第7条记录改为 7           4           C           C

则结果为:

COL1    COL2    COUNT

1           A           1

2           A           1

2          B           1

3           B           1

4           C           2

即按COL1, COL2分组后COL1, COL2的内容和每组中COL3不重复的记录数

http://post.blog.hexun.com/wolffery/trackback.aspx?articleid=18946781&key=633458003799400000本文章尚未被引用

例表如下:

表名:MYTEST

TID    COL1    COL2     COL3

1           1           A            A

2           1           A            A

3           2           A            A

4           2           B            A

5           3           B            B

6           3           B            B

7           4           C            B

8           4           C            B

9           1           A            A

10         2           B            A

1查找表中的一个字段,重复的只找一个:

SELECT DISTINCT COL1 FROM MYTEST;

2查找表中的多个字段,其中某个字段不重复:

SELECT * FROM MYTEST WHERE rowid IN (SELECT    min(rowid) FROM MYTEST GROUP BY COL1);

结果为:

1           1           A            A

3           2           A            A

5           3           B            B

7           4           C            B

其中rowid为oracle中的虚拟column用来指向表中一个row的存放地址,改为其它的不能运行(这样理解不知对不对?哪位朋友有更好的理解请给我留言)

min方法若改为max时结果如下:

6          3          B          B

8          4          C          B

9          1          A          A

10        2          B          A

3查询并统计该字段的数量

SELECT COL1,COUNT(COL1) FROM MYTEST GROUP BY COL1;

结果为:

1          3

2          3

3          2

4          2

GROUP BY 哪个字段只能查找哪个字段和该字段的数量若要同时搜索其它字段就报错

即:

语句若改成    SELECT COUNT(COL1) FROM MYTEST GROUP BY COL1;

或    SELECT COL1,COL2,COUNT(COL1) FROM MYTEST GROUP BY COL1;就会报错

原因可能是:搜索的结果是一组组的数据在每一组数据中,COL2有很多,所以不能搜索出唯一的一个值(这样理解不知对不对?哪位朋友有更好的理解请给我留言)

4从两个表中查询并统计数据

表T_OVERTIME字段

int tid = 0;//加班代码

float days = 0;//工日数

表T_OVERTIMEPERSONNEL字段

int tid = 0;//加班人员代码

int overtimeid = 0;//加班代码

int userid=0;//用户ID

统计每个用户的加班工日数

SELECT b.userid,SUM(a.days) FROM T_OVERTIME a,T_OVERTIMEPERSONNEL b WHERE a.tid=b.overtimeid GROUP BY b.userid

5按多个字段分组并统计

SELECT COL1, COL2, COUNT(*) AS Expr1

FROM mytest

GROUP BY COL1, COL2

结果为:

COL1    COL2    COUNT

1           A           3

2           A           1

2          B           2

3           B           2

4           C           2

即按COL1, COL2分组后COL1, COL2的内容和每组中记录的数量

若:SELECT COL1, COL2, COUNT(DISTINCT COL3) AS Expr1

FROM mytest

GROUP BY COL1, COL2

结果为:

COL1    COL2    COUNT

1           A           1

2           A           1

2          B           1

3           B           1

4           C           1

若将第7条记录改为 7           4           C           C

则结果为:

COL1    COL2    COUNT

1           A           1

2           A           1

2          B           1

3           B           1

4           C           2

即按COL1, COL2分组后COL1, COL2的内容和每组中COL3不重复的记录数

SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

SQL Server 执行计划利用统计信息对数据行的预估原理二(为什么复合索引列顺序会影响到执行计划对数据行的预估)

sql 查出一张表中重复的所有记录数据

1.在面试的时候碰到一个 问题,就是让写一张表中有id和name 两个字段,查询出name重复的所有数据,现在列下: select * from xi a where (a.username) in ...

SQL删除重复数据方法

例如: id           name         value 1               a                 pp 2               a           ...

【转】SQL删除重复数据方法

例如: id           name         value 1               a                 pp 2               a           ...

SQL删除重复数据,保留一条

例如: id           name         value 1               a                 pp 2               a           ...

统计数据方面SQL与HQL

因为HQL是面向对象的,所以对于统计数据方面使用HQL时不合适的,其实HQL最终还是会转化成SQL语句,项目里使用HQL语句应该是为了标准规范化. 统计的数据:同一个表,同一个字段,不同属性,统计不同 ...

随机推荐

【Java每日一题】20161024

20161021问题解析请点击今日问题下方的"[Java每日一题]20161024"查看 package Oct2016; public class Ques1024 { publ ...

CSUFT2016训练赛

解题报告: Fence Repair Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 39958   Accepted: 13 ...

hdu4485 B-Casting(mod运算)

B-Casting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

java web实现 忘记密码(找回密码)功能及代码

java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...

ABP Zero 多租户管理

ABPZero - 多租户管理 启用多租户 ASP.NET Boilerplate和module-zero可以运行多租户或单租户模式.多租户默认为禁用.我们可以在我们的模块PreInitialize方 ...

js计算字数