mysql分组查询

「爱情、让人受尽委屈。」 2023-09-25 10:00 147阅读 0赞

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分组查询\_mysql分组查询

mysql分组查询语句?

如果你有一个字段是时间字段并且精确到每刻钟,group by是完全可以实现的

求助:mysql日期间隔查询?-如何查询间隔小于或等于5个月的数?

获取最近5个月以内的数据 SELECT * FROM`table` WHERE `date`> DATE_SUB(NOW(), INTERVAL 5 MONTH) ; DATE_SUB() 是将第一个参数的时间减去第二个参数

mysql分组查询\_mysql分组查询\_02

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分组查询\_mysql分组查询\_03

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 表

发表评论

表情:
评论列表 (有 0 条评论,147人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 分组查询

    MySQL SELECT 语句,允许使用 GROUP BY 子句,将结果集中的数据行根据选择列的值进行逻辑分组,以便能汇总表内容的子集,实现对每个组而不是对整个结果集进行整合。