count语句显示0选项

pzzc18 2011-08-25 10:38:47
select l.name,count(t.id) as 'cid' from type1data t,login l
where t.date between '2011-08-01' and '2011-08-31' and l.id=t.userid and
t.userid in(select id from login where rule='work' and deptid=1) group by l.name order by 'cid'

这是一个文章发布统计的sql语句,
但是上面这句,只能将发布过新闻的用户查询出来,
我希望能够将所有用户都查出来,没有发布过新闻的用户就显示0
数据库是Mysql
...全文
205 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzzc18 2011-08-26
  • 打赏
  • 举报
回复
搞定了,13楼正解
WWWWA 2011-08-26
  • 打赏
  • 举报
回复
SELECT a.`name`,COUNT(b.id) FROM `login` a
LEFT JOIN (SELECT * FROM type1data WHERE DATE BETWEEN '2011-08-01' AND '2011-08-31') b ON a.`id`=b.`userid`
WHERE a.`rule`='work' GROUP BY a.`name`;
pzzc18 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 vipper23 的回复:]
SQL code
mysql> select b.name,count(a.id) from type1data a right join login b on b.id=a.userid group by b.name order by 2 desc;
+----------------+-------------+
| name | count(a.id) |
+-……
[/Quote]
奇怪了,我加了其他条件以后就又不能显示0发布的单位了,大家帮我看看代码

select b.name,count(a.id) as 'cid' from type1data a right join login b on b.id=a.userid
where a.date between '2011-08-01' and '2011-08-31'
and a.userid in(select id from login where dept='work' and deptid=1) group by b.name order by 2 desc
WWWWA 2011-08-26
  • 打赏
  • 举报
回复
应该是
3
0
0

SELECT a.`name`,COUNT(b.id) FROM `login` a
LEFT JOIN type1data b ON a.`id`=b.`userid`
WHERE a.`rule`='work' GROUP BY a.`name`;
vipper23 2011-08-26
  • 打赏
  • 举报
回复
mysql> select b.name,count(a.id) from type1data a right join login b on b.id=a.userid group by b.name order by 2 desc;
+----------------+-------------+
| name | count(a.id) |
+----------------+-------------+
| 玉凯一大队 | 3 |
| 直属支队宣传科 | 0 |
| 玉凯二大队 | 0 |
| 贵遵一大队 | 0 |
| admin | 0 |
+----------------+-------------+
5 rows in set (0.00 sec)
pzzc18 2011-08-26
  • 打赏
  • 举报
回复
玉凯一大队 3
玉凯二大队 1
贵遵一大队 0


就是这样子
WWWWA 2011-08-26
  • 打赏
  • 举报
回复
要求结果出来看看
pzzc18 2011-08-26
  • 打赏
  • 举报
回复
两个表的sql代码如下

DROP TABLE IF EXISTS `login`;
CREATE TABLE `login` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`pwd` varchar(20) DEFAULT NULL,
`rule` varchar(10) DEFAULT NULL,
`lanmus` varchar(50) DEFAULT NULL,
`deptid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=gbk;
INSERT INTO login VALUES ('1', '直属支队宣传科', '123', 'master', '1,2,4,5,6,7,8,9,10,14,16,17,18', '1');
INSERT INTO login VALUES ('2', '玉凯一大队', '123', 'work', '1,2,4,5,6,7,8,9,10,13,15,', '1');
INSERT INTO login VALUES ('3', '玉凯二大队', '123', 'work', '1,2,4,5,6,7,8,9,10,13,15,', '1');
INSERT INTO login VALUES ('4', 'admin', 'admin', 'master', '1,2,4,5,6,7,8,9,10,13,12,14,15,16,17,18,19,', '4');
INSERT INTO login VALUES ('7', '贵遵一大队', '123', 'work', '1,2,4,5,6,7,8,9,10,13,15,', '1');

DROP TABLE IF EXISTS `type1data`;
CREATE TABLE `type1data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userid` int(11) NOT NULL DEFAULT '0',
`date` varchar(20) NOT NULL DEFAULT '0000-00-00 00:00:00',
`mediaName` varchar(40) DEFAULT NULL,
`mediaGuige` varchar(20) DEFAULT NULL,
`mediaType` varchar(20) DEFAULT NULL,
`title` varchar(100) DEFAULT NULL,
`ticai` varchar(30) DEFAULT NULL COMMENT '电视报纸广播网络',
`banmian` varchar(50) DEFAULT NULL,
`author` varchar(50) DEFAULT NULL,
`imgstr` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=gbk;

INSERT INTO type1data VALUES ('4', '2', '2011-08-03', 'bbs', '省级二类', '广播', 'testdata', 'tab', '111', 'easy', null);
INSERT INTO type1data VALUES ('2', '2', '2011-08-03', '贵阳晚报', '地市级', '报纸', '测试数据', '新闻1', 'A4', '测试', null);
INSERT INTO type1data VALUES ('3', '2', '2011-08-03', '测试', '中央二类', '报纸', '测试1', '测试2', '测试', '测试2', null);
WWWWA 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 pzzc18 的回复:]
额..是我描述的不清楚...
左连接也是不行啊...
实际上是这样的..
我的用户表里 有20个用户,
现在我要对这20个用户的新闻发布数量进行排行统计,按照发布的数量,从多到少依次排行..
但是我上面的sql语句,只能将发布过新闻的用户统计出来...
可没有发布过的用户,就没有显示了....
我希望的是..让没有发布过信息的用户也显示,只不过显示发布数量为0

因为我还要统计……
[/Quote]
贴建表及插入记录的SQL,及要求结果出来看看
pzzc18 2011-08-26
  • 打赏
  • 举报
回复
额..是我描述的不清楚...
左连接也是不行啊...
实际上是这样的..
我的用户表里 有20个用户,
现在我要对这20个用户的新闻发布数量进行排行统计,按照发布的数量,从多到少依次排行..
但是我上面的sql语句,只能将发布过新闻的用户统计出来...
可没有发布过的用户,就没有显示了....
我希望的是..让没有发布过信息的用户也显示,只不过显示发布数量为0

因为我还要统计另一个表的数据,也是要各个用户都统计出来,而且两个表统计后的数字还要相加...
所以必须要把0的用户也显示出来,我好相加..不然没有,加都没法加...
Lemon2050 2011-08-26
  • 打赏
  • 举报
回复
select l.name,count(t.id) as 'cid' from type1data t,login l
where t.date between '2011-08-01' and '2011-08-31' and l.id=t.userid and
t.userid in(select id from login where rule='work' and deptid=1) group by l.name order by 'cid'
union all

select l.name, 0 as 'cid'
from type1data t,login l
。。。。
这里语句是查询没有发布过新闻的用户。

这样就能满足你的要求啦。不知道你内部的结构,只是用这个办法了
WWWWA 2011-08-26
  • 打赏
  • 举报
回复
贴建表及插入记录的SQL,及要求结果出来看看

你的是内连接,改用LEFT JOIN、RIGHT JOIN试试
rucypli 2011-08-25
  • 打赏
  • 举报
回复
恩 left join
nicenight 2011-08-25
  • 打赏
  • 举报
回复
虽然不知道你在说什么,不过可以试试如下语句:
select l.name,count(t.id) as 'cid' 
from login l left join type1data t
on l.id=t.userid
where t.date between '2011-08-01' and '2011-08-31' and t.userid in(select id from login where rule='work' and deptid=1)
group by l.name
order by 'cid'

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧