当前位置:首页>开发>正文

如何用MYSQL语句分组 Mysql 分组并排序

2023-04-23 15:57:11 互联网 未知 开发

 如何用MYSQL语句分组 Mysql 分组并排序

如何用MYSQL语句分组

用 UNION 联合查询
(select * from 表名 where 字段名 = 1 limit 5 )
union
(select * from 表名 where 字段名 = 2 limit 5 )

Mysql 分组并排序

1、按rowno分组后,每个rowno只有一条数据。所以排序不可能同时按rowno, count来排序。
2、感觉你应该只按count排序
------------------
SELECT rowno
,COUNT(*) AS Num

FROM TableGROUP BY rowno
ORDER BY COUNT(*)

mysql分组查询。

错误方法:
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 按字段的一部分分组

CREATE TABLE test_guankairi (
id INT,
image VARCHAR(30)
)

INSERT INTO test_guankairi
SELECT 1, :/image/a/1/tupian.jpg UNION ALL
SELECT 2, :/image/a/2/tupian.jpg UNION ALL
SELECT 3, :/image/a/3/tupian.jpg UNION ALL
SELECT 4, :/image/a/4/tupian.jpg UNION ALL
SELECT 5, :/image/a/1/tupian5.jpg

SELECT
-- REVERSE 是字符反转
-- 因为 MySQL 的 INSTR, 只能从前向后查找。
-- 而这里需要 从后向前找第一个 /
-- 因此先做字符反转。
-- INSTR 用于找第一个 / 的位置.
-- RIGHT 用于获取字符右边的字符
RIGHT(image, INSTR( REVERSE(image), /) ) AS img,
COUNT(*)
FROM
test_guankairi
GROUP BY
RIGHT(image, INSTR( REVERSE(image), /) )

-------------- ----------
| img | COUNT(*) |
-------------- ----------
| /tupian.jpg | 4 |
| /tupian5.jpg | 1 |
-------------- ----------
2 rows in set (0.00 sec)

MySQL 怎样分组查询

mysql
  与
  oracle
  中分组、聚合函数的区别!

  今天需要这样一句
  sql
  :先用
  group by
  进行分组,然后利用聚合函数
  count
  或者
  sum
  进行计算,并显示
  其它的辅助信息。

  在
  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

  房间表,
  seq
  房间入住序号
  (主键)
  ,
  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

mySQL分组排序

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

求SQL关于分组的语句写法

唯一记录:select uid,in_date from person group by uid,in_date having count(*)=
重复纪录:select uid,in_date,count(*) from person group by uid,in_date having count(*)>1