学生 A表: pid,name
课程 B表:pid,class,parentclass
学生会上很比较多的课程class(语文、数学),但学生对class又报了parentclass(譬如基础班、考前班),这样,pid和parentclass就会出现一对多。譬如肖明报了语文的基础班,又报了数学的基础班,如果按照parentclass基础班来进行查询学生的话,就会出现两条肖明的数据。
pid class parentclass
肖明 语文 基础班
肖明 数学 基础班
请教这种情况如何按照parentclass为条件进行分页查询并得出去掉学生重复值的count数。谢谢。
琢磨了一下:
第一页:
select top 10 a.pid,a.name from A表 a left join B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid,a.name order by a.pid desc
第二页:
select top 10 a.pid,a.name from A表 a left join B表 b ON a.pid=b.pid where b.parentclass='基础班' and b.pid >(select min(pid) from (select top 10 pid from B表 where parentclass='基础班' group by pid order by pid desc) as tmp) group by a.pid,a.name order by a.pid desc
获得总数值:
select distinct count(*) from B表 where parentclass=‘基础班’
各位帮忙指点下,能有更好的解决办法感激不尽!
select count(pid) from xxx group by pid, parentclass
差不多就是这样,你试试就出来了。
select pid,parentclass,count(1) from (select * from A left join B on A.pid=B.pid) group by pid, parentclass
--这就是所有学生的选课信息 with cte as ( select t1.pid,t1.name,t2.class,t2.parentclass from A t1 join B t2 on t1.pid=t2.pid ) --接着求count数,那么直接分组求count即可 select COUNT(cte.parentclass) from cte group by cte.pid,cte.parentclass 大概就是类似的SQL
select t1.pid,t1.name,t2.class,t2.parentclass from A t1 join B t2 on t1.pid=t2.pid where t2.parentclass='基础班'
这条语句有重复值,而且这条语句分页的sql语句不知道写!求指点!
@唐朝程序员: where只是筛选了一个parentclass,没有筛选user字段,所以有重复;
对于分页的话,你可以采取rownum = row_number() over ()
然后在外层套一个select来实现row_number()分页。
建议不要针对问题问问题,你还是把sql基础好好熟悉一下吧。磨刀不误砍柴工!要不然,改一改你又问了啊。所以你还是吧sql的基础知识拿起来吧!
sql基础确实不好,但我是几年来第一次在这里问问题!时间比较急,所以提出来了,自己琢磨了好久。
select t1.pid,t1.name,t2.class,t2.parentclass from A t1 join B t2 on t1.pid=t2.pid where t2.parentclass='基础班'
这条语句有重复值,而且这条语句分页的sql语句不知道写!求指点!
没有太看明白你这问题的意思..
如果直接是
select a.name,b.parentclass from a,b where a.pid=b.pid group by a.name,b.parentclass
可以么.?
我自己解决了。
第一页:
select top 10 a.pid,a.name from A表 a LEFT JOIN B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid order by a.pid desc
后面的页就不知道怎么写了
上面打错了,应该第一页是这样的:
select top 10 a.pid,a.name from A表 a LEFT JOIN B表 b ON a.pid=b.pid where b.parentclass='基础班' group by a.pid,a.name order by a.pid desc