sql查询问题,请大家帮帮忙,谢谢了

问题描述

sql查询问题,请大家帮帮忙,谢谢了

有两列数据,数据结构如下
用户号 类型
a 1
b 1
b 2
c 1
c 2
c 3
d 1
d 2
e 2
e 3
f 3
我想查询类型只是1的用户号,或者类型只是1,2的用户号,或者类型同时为1,2,3的用户号
谢谢大家

解决方案

可以像下面这样,统计一下每个用户不同类型的数量,限定类型数量和类型值来过滤
 select * from 表名 a,(select count(distinct *)  cnt,用户号 from 表名 group by 用户号) b
 where  a.用户号=b.用户号 and ( (a.类型=1 and cnt=1) or  (cnt=3)  or (cnt=2 and a.类型<>3)

解决方案二:

建议你分别查询出这三个表然后union成最终表。

解决方案三:

    select  a.*,b.*,c.* from   (select table.yhh from table  where table.lx=1) a (select table.yhh from table  where 

    table.lx=2) b  (select table.yhh from table  where table.lx=3) c where a.yhh=b.yhh or (a.hh=b.yhh and 

     a.yhh=c.yhh);

table是你的表,yhh是用户号字段,lx是类型字段。你试试这个能不能查出你想要的结果,我这边没有数据库验证不了

解决方案四:

给你的上个sql语句好像查不了所有类型为1的用户号,原谅我数据库学的太烂

     select  a.*  from   (select table.yhh from table  where table.lx=1) a  union  select b.*,c.* from (select table.yhh from table  where  table.lx=2) b ,(select table.yhh from table  where table.lx=3) c where a.yhh=b.yhh or (a.hh=b.yhh and a.yhh=c.yhh);

不知道后面where条件能不能访问到a表如果不能就改为

    select  a.*  from   (select table.yhh from table  where table.lx=1) a  union  select b.*,c.* from (select table.yhh from table  where table.lx=1) a ,(select table.yhh from table  where  table.lx=2) b ,(select table.yhh from table  where table.lx=3) c where a.yhh=b.yhh or (a.hh=b.yhh and a.yhh=c.yhh);

解决方案五:

思路我是这么理解的:
当用户号只有类型=1时, 表中的这个用户记录数(即count)为1;
当用户号的类型为(1, 2)时,表中该用户记录数count为2;
同样地,当用户号的类型为(1,2,3)时,表中该用户的记录数count为3.
那么,可以通过这三个条件按照用户号分组后,做或操作。或者也可以理解为union操作,查询出符合这些条件的用户。

假设你的表名为userInfo, 用户号字段名为userNo, 类型字段名为userType. 通过这三个条件按照用户号分组后,做或操作,mysql语句可以这么写:
select userNo, count(userNo) as userCount , userType
from userInfo
group by userNo
having (userType=1 and count(userNo) =1)
or (u.userType in (1, 2) and count(userNo)=2)
or (userType in(1,2,3) and count(userNo)=3) ;

其实这个思路和一楼楼主danielinbiti 的思路是一致的。
只不过danielinbiti用了链接来实现count(userNo) 计数,
我是用了group by 语句直接在一个表里查询得到count(userNo) 。

或者你也可以将having 语句中的or条件拆分出来,用union来替代:

(select userNo, count(userNo) as userCount , userType
from userInfo
group by userNo
having (userType=1 and count(userNo) =1) )
union
(select userNo, count(userNo) as userCount , userType
from userInfo
group by userNo
having (u.userType in (1, 2) and count(userNo)=2) )
union
(select userNo, count(userNo) as userCount , userType
from userInfo
group by userNo
having (userType in(1,2,3) and count(userNo)=3) ) ;

P.S.:写mysql语句过程中顺便发现了个csdn的Bug--就是在评论的文本框内编辑,遇到字符*字体就会自动变成斜的格式, 需要用反斜杠来转义*字符,也就是*才能正常识别。^_^

解决方案六:

select distinct userNo from userInfo
where userNo not in (
select u.userNo from userInfo u
inner join (select userNo, count(userNo) as userCount from userInfo group by userNo) t
on u.userNo=t.userNo
where u.userType>t.userCount);

时间: 2024-08-30 17:23:04

sql查询问题,请大家帮帮忙,谢谢了的相关文章

sql-有关数据库查询的一个问题请大家帮帮忙谢谢!!

问题描述 有关数据库查询的一个问题请大家帮帮忙谢谢!! 写一个查询SQL 将 oal_tb_waybill 表中创建时间近三个月 statee字段为2或5的数据查询出来 该怎么写呢 用的是MySql数据库 解决方案 日期间隔返回月数http://dodomail.iteye.com/blog/883422 解决方案二: SELECT * FROM oal_tb_waybill WHERE created > DATE_SUB(NOW(),INTERVAL 3 MONTH) AND created

SQL Server2008r2 sqlexpress服务无法打开 请各位帮帮忙 谢谢!

问题描述 SQL Server2008r2 sqlexpress服务无法打开 请各位帮帮忙 谢谢! 下面是出错的日志文件 2016-05-15 10:03:21.91 Server Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29 Copyright (c) 1988-2008 Microsoft Corporation Express Edition on Windows NT 6.1

请问大家,为什么value的值是空指针呢?程序很简单,请大家帮帮忙!!谢谢

问题描述 importjava.io.IOException;importjava.io.StringReader;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importjavax.xml.parsers.ParserConfigurationException;importorg.xml.sax.InputSource;importorg.xml.sax.SAXE

安装时出错 请大家帮帮忙

问题描述 安装一半的时候出现此窗口!请大家帮帮忙谢谢feature;defaultfeaturecomponent;newcomponent4file;c;programfiles......data1.2libdependenciesorojaka28c8.rraerror;系统找不到指定的文件, 解决方案 解决方案二:安装什么的?解决方案三:安eclipse解决方案四:卸干净了再重装吧解决方案五:关键是没安上怎么卸载啊

查询多对多sql语句写法 悬赏190 请人帮帮忙!! 急啊、、

问题描述 查询多对多sql语句写法 悬赏190 请人帮帮忙!! 急啊.. 一个是众酬表,一个是会员表,还有个这两者的中间表. 会员可以参与多个众酬 众酬可以被多个会员参与 1.会员角度:会员登录,要查询当前所有的众酬列表并且标记哪些众酬当前会员已参与 2.众酬角度:进入某个众酬详情可罗列当前参与此众酬的会员列表 解决方案 这取决于众筹表怎么设计 解决方案二: select *,(select count(1) from 众筹会员表 where id=z.id) as canyu from 众筹表

javaweb-myeclipse开启weblogic时报了如下错误,请各位帮帮忙,谢谢了

问题描述 myeclipse开启weblogic时报了如下错误,请各位帮帮忙,谢谢了 2016-2-29 21:37:30 com.sun.faces.config.ConfigureListener contextInitialized 信息: Initializing Sun's JavaServer Faces implementation (1.2_03-b04-FCS) for context '/console' 2016-2-29 21:37:30 com.sun.faces.co

c++-一道题目,请大家帮帮忙,谢谢了

问题描述 一道题目,请大家帮帮忙,谢谢了 [问题描述] 小山田心子是一只快乐的小白兔,某天她看到一座彩虹桥,彩虹桥长度为N,每个单位都有一个美观度,小山田心子一开始在单位1,并取走单位1的美观值,接下来她会在从下一格开始到N中选择一个最大美观度的单位跳过去(如果美观值相同取前面的),然后取走美观值,直到她走到N,请输出她取走的美观度之和. [输入格式] 第一行一个整数N(10<N<1000),接下来一行N个整数表示彩虹桥每个单位的美观度. [输出格式] 小山田心子取过的美观值之和. [输入样例

android-关于Android的问题,请各位帮帮忙,谢谢

问题描述 关于Android的问题,请各位帮帮忙,谢谢 开发Android应用一定要在eclipse for java ee上吗,可不可以用eclipse for java se,还有可不可以在后者上安装adt插件 解决方案 建议用android studio 毕竟是google的亲儿子 解决方案二: 这个是可以的,但是建议用ee 解决方案三: 是可以的,不过现在大部分开始转studio开发了 解决方案四: 还是用Android Studio吧 解决方案五: 都可以 .用eclipse比较麻烦,

请大神给我写条sql查询语句,mysql 数据库,谢谢

问题描述 请大神给我写条sql查询语句,mysql 数据库,谢谢 查询第一张表为空,再去查询第2张表,不为空就取第一张表里的数据,第一张表的数据是和 第2张表里的一样的,是多表查询,谢谢,坐等大神来赐教 解决方案 要用外键的哦!select ... from a,b where a.ID=b.ID,这个是参考的哦!希望可以帮助您!