mysql 操作命令

1、查询两个表 id相同的行:

select * from mytable join mytable2 on mytable2.id = mytable.id;

2、计算 mytable 表中 与 mytable2 表 id 相同的行的出现次数,并定义列名为 aaa,同时查出 mytable 的name、age列信息。

select name,age,(select count(*) from mytable2 where mytable.id = mytable2.id) from mytable;

3、

SELECT * FROM your_table WHERE name IN ( SELECT name FROM your_table GROUP BY name HAVING COUNT(*) > 1 );

查询指定重复行的用户

select * from t_c1 where `学号`  in (select  学号 from  t_1 group by `学号`  having count(*)>1 );

+----+--------+-----------+--------+--------+--------+--------------+--------------+

| id | 学号   | 姓名      | 性别   | 籍贯   | 年龄   | 成绩级别     | 联系电话     |

+----+--------+-----------+--------+--------+--------+--------------+--------------+

|  1 |   1001 | 张小花    | 男     | 汉族   |     88 | A级          |    156783455 |

|  7 |   1001 | 张小花    | 男     | 汉族   |     44 | B级          |    165834685 |

+----+--------+-----------+--------+--------+--------+--------------+--------------+

4、

SELECT t_c1.`姓名`, COUNT(t_c1.`学号`) AS num

    -> FROM t_c1

    -> GROUP BY t_c1.`姓名`, t_c1.`学号`;

+-----------+-----+

| 姓名      | num |

+-----------+-----+

| 张小花    |   2 |

| 李明      |   1 |

| 吴迪      |   1 |

| 李星      |   1 |

| 小米      |   1 |

| 奥咪咪    |   1 |

+-----------+-----+

6 rows in set (0.01 sec)

select t_c1.`姓名`,count(t_c1.`学号`) as num from t_c1 group by t_c1.`学号` ;

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.t_c1.姓名' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

非聚合列是指在一个 SQL 查询中,没有被包含在聚合函数(例如 COUNT、SUM、AVG 等)中的列。在使用 GROUP BY 子句进行分组查询时,非聚合列必须要么出现在 GROUP BY 子句中,要么通过聚合函数进行处理。

在您的查询中,t_c1.姓名 是一个非聚合列,因为它没有被包含在聚合函数中(COUNT)。根据 SQL 的标准规定,在启用了 ONLY_FULL_GROUP_BY 模式的情况下,非聚合列必须要么出现在 GROUP BY 子句中,要么被聚合函数处理。

为了修正这个问题,您可以将t_c1.姓名列添加到 GROUP BY 子句中,或者对其使用适当的聚合函数(比如 MAX())来处理。

要解决这个问题,您有两个选择:

  1. 将所有非聚合列都添加到GROUP BY子句中:

SELECT t_c1.`姓名`, COUNT(t_c1.`学号`) AS num FROM t_c1 GROUP BY t_c1.`姓名`, t_c1.`学号`;

  1. 使用聚合函数对非聚合列进行处理:

SELECT MAX(t_c1.`姓名`) AS 姓名, COUNT(t_c1.`学号`) AS num FROM t_c1 GROUP BY t_c1.`学号`;

4、查出 table1 中与 table2  相同的学号 中,每个学号出现的次数。

select max(t_c1.`姓名`) as `姓名`, count(t_c1.`学号`) as num from t_c1 join t_c2 on  t_c1.`学号`= t_c2.`学号`  group

by t_c1.`学号`;

select max(t_c1.`姓名`) as `姓名`, count(t_c1.`学号`) as num from t_c1 join t_c2 on  t_c1.`学号`= t_c2.`学号`  group

by t_c1.`学号`;

+-----------+-----+

| 姓名      | num |

+-----------+-----+

| 张小花    |   2 |

| 李明      |   1 |

| 吴迪      |   1 |

| 小米      |   1 |

| 奥咪咪    |   1 |

+-----------+-----+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值