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())来处理。
要解决这个问题,您有两个选择:
- 将所有非聚合列都添加到
GROUP BY
子句中:
SELECT t_c1.`姓名`, COUNT(t_c1.`学号`) AS num FROM t_c1 GROUP BY t_c1.`姓名`, t_c1.`学号`;
- 使用聚合函数对非聚合列进行处理:
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 |
+-----------+-----+