mysql分组查询
MySQL分组查询-组内多条件优先级查询
如果只是单纯你给的数据的话。
createtabletest
(uidint,
targervarchar(1),
statusint,
datedate);
insertintotestvalues(1,’A’,0,’2018-02-01’);
insertintotestvalues(1,’B’,1,’2018-01-01’);
insertintotestvalues(2,’A’,0,’2018-02-01’);
insertintotestvalues(2,’B’,0,’2018-01-01’);
selectt1.uid,max(casewhent1.status=1thent1.targetelset2.targetend)targerfromtestt1,
(selecta.*fromtesta,
(selectuid,max(date)datefromtestgroupbyuid)b
wherea.uid=b.uidanda.date=b.date)t2
wheret1.uid=t2.uid
groupbyt1.uid
如果混杂其他数据的话,另说。
mysql分组查询语句?
如果你有一个字段是时间字段并且精确到每刻钟,group by是完全可以实现的
求助:mysql日期间隔查询?-如何查询间隔小于或等于5个月的数?
获取最近5个月以内的数据 SELECT * FROM`table` WHERE `date`> DATE_SUB(NOW(), INTERVAL 5 MONTH) ; DATE_SUB() 是将第一个参数的时间减去第二个参数
mysql按10分钟,分组统计数据,如何统计
`cmd_info`where`date_str`=20161120groupbytimekeyorderbytimekey;—126rows—以上2个SQL语句的思路类似——使用「groupby」进行区分,但是方法有所不同,前者只能针对10分钟(或1小时)级别,后者可以动态调整间隔大小,两者效率差不多,可以根据实际情况选用selectconcat(date(time_str),’’,hour(time_str),’:’,round(minute(time_str)/10,0)*10),count(*)from`security`。
MySQL 怎样分组查询
mysql
oracle
中分组、聚合函数的区别!
今天需要这样一句
group by
进行分组,然后利用聚合函数
count
进行计算,并显示
其它的辅助信息。
mysql
环境中,我模拟如下环境:
CREATE TABLE `room` (
`rid` varchar(5) default NULL,
`rname` varchar(5) default NULL,
`pid` int(11) default NULL,
`seq` int(11) NOT NULL auto_increment,
PRIMARY KEY
(`seq`)
) ENGINE=InnoDB DEFAULT
CHARSET=utf8
房间入住序号
rname
为房间名,这里不考虑第三范式
情景:人住房间,
统计某个房间某个人住的次数
用户表,客人的信息
CREATE TABLE `user1` (
`ID` int(11) NOT NULL auto_increment,
`USERNAME` varchar(50) default ‘’,
`PASSWORD` varchar(50) default ‘’,
PRIMARY KEY
(`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk
Mysql
中语句如下:
select count(u.username)
r.rname
,r.rid,r.pid
from room r,user1 u
where r.pid=u.id
group by r.rid,r.pid
r.rname
并没有出现在
group by
子句、聚合函数中,但是
MYSQL
中仍然能够执行、列
ORACLE
中,却不能!
Oracle
Ora-00979 not a ORDER BY expression
order by
c.channel_code
ORDER BY
select count(c.channel_name),m.media_name
from channel c,media m
where c.media_code = m.media_code
group by c.media_code,m.media_name
order by
c.channel_code
Ora-00979 not a GROUP BY expression
group by
或者聚合函数中没有包含
c.channel_name
select count(c.channel_name),m.media_name,
c.channel_name
from channel c,media m分组查询:
SELECT 要显示的列 FROM 表 GROUP BY 要分组的列
如:SELECT sname,age,address FROM student GROUP BY address
上面就是把地址address列进行分组,显示姓名、年龄还有地址
分组查询加条件:
SELECT 要显示的列 FROM 表 WHERE 条件 GROUP BY 要分组的列
如:SELECT sname,age,address FROM student WHERE age<17 GROUP BY address
上面就是把地址address列进行分组,符合年龄小于17岁的才显示出符合的姓名、年龄还有地址错误方法:
select * from a where age=(select max(age) from a where sex=”男”)
or age=(select max(age) from a where sex=”女”)
解释:先用两个子查询分别把男女生中年龄最大的数字筛选出来,然后在整个表中寻找对应年龄的男生与女生。但是这样的话,男女生中年龄不是最大的也可能被选出来
因此,要分别查出来最高年龄的男生与女生,再用union结合到一个视图下。
由于不能用union方式,所以解决方法如下:
select * from a where (age,sex) in (select age,sex from a where 序列号=”1” or 序列号=”11” group by sex order by age desc)
解释:先把表中的男女分组,组内按年龄的降序排列。因为很清楚男生女生的具体数量,那么就能在第一行和第十一行找到代表年龄最大的两个age数和对应的性别。然后,在整个表中进行一个条件查询。
其实写到这里,我觉得如果不能用(age,sex)双列条件判断,那么只能用union了
mysql 数据库:分组查询数量语句
参考sql语句
select
sum(case when a1=1 then 1 else 0 end )as a1count,
sum(case when a2=1 then 1 else 0 end )as a2count,
sum(case when a3=1 then 1 else 0 end )as a3count,
sum(case when a4=1 then 1 else 0 end )as a4count
from 表
还没有评论,来说两句吧...