分组和聚合函数sql经典例子
1.查询本店价比市场价省钱,并且要求省钱元以上的取出来:
selectgoods_id,market_price,shop_price,(market_price-shop_price)ascount_pricefromgoodswhere(market_price-shop_price);
2.查询部门人数,最高工资,最低工资,平均工资,工资总和:
selectcount(*)as"部门人数",max(salary)as"最高工资",min(salary)as"最低工资",avg(salary)"平均工资",sum(salary)"工资总和"fromemp\G;
3.以dept_Id分组查询:
select*fromempgroupbydept_id;
4.查询以dept_id分组后,每组的记录数,和dept_id:
selectdept_id,count(*)fromempgroupbydept_id;
5.使用withrollup后,把每组的统计数再次统计总和:
selectdept_id,count(*)astotalfromempgroupbydept_idwithrollup;
select*fromempgroupbydept_idhavingcount(*)3;
selectdept_id,count(*)astotalfromempgroupbydept_idhavingcount(*)3;
select*,count(*)astotalfromempgroupbydept_idhavingcount(*)3;
selectdept_id,count(*)as"部门人数",min(salary)"最低工资",max(salary)"最高工资",avg(salary)"平均工资"
fromempgroupbydept_idhavingavg(salary)00;
mysqlselectdept_id,count(*)as"部门人数",min(salary)"最低工资",max(salary)"最高工资",avg(salary)"平均工资"fromempgroupbydept_idhavingavg(salary)orderbydept_iddesc;
fromempgroupbydept_idhavingavg(salary)orderbydept_iddesclimit1,1;
insetintoresult(name,subject,score)values
(‘张三’,‘数学’,90),(‘张三’,‘语文’,50),(‘张三’,‘地理’,40),
(‘李四,‘语文’,55),(‘李四’,‘政治’,45),
(‘王五’,‘政治’,30),
(‘赵六’,‘语文’,),(‘赵六’,‘数学’,99),(‘赵六’,‘品德’,98),
题目:查询出挂科2门以及2门以上的学员的平均分:
方案一:逆向思维,先查出所有人的平均分,然后再筛选
第一步:查询所有人的平均分。
第二部:计算出每个人的挂科情况,通过g标志处挂科结果
第三部:挂科数目就是g的sum结果
第四部:每个人的平均分以及挂科数已经算出,再having筛选一下即可得出最终结果:
方案二:先找出谁的挂科数=2,找到这些人再求这些人的平均分:
第一步:找出谁挂科了:
查出来的结果可以当成表来看:
mysqlselect*fromemporderbyrand()limit3;
查询所有字段和不重复的dept_id的总数:
select*,count(distinct(dept_id))fromemp;
查询不重复的empname:
selectdistinct(empname)fromemp;
mysqlselect*fromemp;
mysqlselectdistinct*fromemp;
北京的哪个医院治白癜风好白癜风的早期症状