现有两个表A表【sql_bumeng】B表【sql_content】-- ----------------------------------------------------------
-- 表的结构 `sql_bumeng`
--CREATE TABLE IF NOT EXISTS `sql_bumeng` (
`id` int(6) unsigned NOT NULL auto_increment,
`bmname` varchar(200) collate utf8_unicode_ci NOT NULL COMMENT '单位名称',
`arcnum` int(5) unsigned NOT NULL COMMENT '文章采用数',
`arctime` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;--
-- 导出表中的数据 `sql_bumeng`
--INSERT INTO `sql_bumeng` (`id`, `bmname`, `arcnum`, `arctime`) VALUES
(1, 'AA县', 5, 1272758400),
(2, 'BB县', 8, 1272758400);-- ----------------------------------------------------------
-- 表的结构 `sql_content`
--CREATE TABLE IF NOT EXISTS `sql_content` (
`id` int(6) unsigned NOT NULL auto_increment,
`title` varchar(200) collate utf8_unicode_ci NOT NULL COMMENT '标题',
`bmname` varchar(100) collate utf8_unicode_ci NOT NULL COMMENT '单位名称',
`arcrank` tinyint(1) unsigned NOT NULL COMMENT '文章状态',
`pubdate` int(11) unsigned NOT NULL COMMENT '发布日期',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;--
-- 导出表中的数据 `sql_content`
--INSERT INTO `sql_content` (`id`, `title`, `bmname`, `arcrank`, `pubdate`) VALUES
(1, '武汉一逃犯看完法治报道后到报社自首', 'AA县', 0, 1272758400),
(2, '解放军首次在全军内对军事训练费用审计调查', 'BB县', 0, 1272758400),
(3, '美媒称菲律宾新总统欲与中国在南沙展开合作', 'CC县', 0, 1270080000),
(4, '食品工程博士称食疗不靠谱 如果有效纯属巧合', 'DD县', 0, 1272758400),
(5, '谷歌"街景车"多年盗窃私人WIFI数据 曾一度否认', 'AA县', 0, 1272758400),
(6, '空难中儿童是否更容易幸存:空难的求生三杀手', 'BB县', 0, 1272758400);
想将列出AA县到DD县的发表排名,同时要求,不管该县是否发表过文章,也显示该列排名我现有统计B表的语句如下,不知道怎么合并统计
SELECT bmname, count( 'id' ) AS arcnum
FROM `sql_content`
WHERE pubdate >1270080000
AND arcrank =0
GROUP BY bmname
ORDER BY arcnum DESC
LIMIT 0 , 30望高手指教
-- 表的结构 `sql_bumeng`
--CREATE TABLE IF NOT EXISTS `sql_bumeng` (
`id` int(6) unsigned NOT NULL auto_increment,
`bmname` varchar(200) collate utf8_unicode_ci NOT NULL COMMENT '单位名称',
`arcnum` int(5) unsigned NOT NULL COMMENT '文章采用数',
`arctime` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ;--
-- 导出表中的数据 `sql_bumeng`
--INSERT INTO `sql_bumeng` (`id`, `bmname`, `arcnum`, `arctime`) VALUES
(1, 'AA县', 5, 1272758400),
(2, 'BB县', 8, 1272758400);-- ----------------------------------------------------------
-- 表的结构 `sql_content`
--CREATE TABLE IF NOT EXISTS `sql_content` (
`id` int(6) unsigned NOT NULL auto_increment,
`title` varchar(200) collate utf8_unicode_ci NOT NULL COMMENT '标题',
`bmname` varchar(100) collate utf8_unicode_ci NOT NULL COMMENT '单位名称',
`arcrank` tinyint(1) unsigned NOT NULL COMMENT '文章状态',
`pubdate` int(11) unsigned NOT NULL COMMENT '发布日期',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;--
-- 导出表中的数据 `sql_content`
--INSERT INTO `sql_content` (`id`, `title`, `bmname`, `arcrank`, `pubdate`) VALUES
(1, '武汉一逃犯看完法治报道后到报社自首', 'AA县', 0, 1272758400),
(2, '解放军首次在全军内对军事训练费用审计调查', 'BB县', 0, 1272758400),
(3, '美媒称菲律宾新总统欲与中国在南沙展开合作', 'CC县', 0, 1270080000),
(4, '食品工程博士称食疗不靠谱 如果有效纯属巧合', 'DD县', 0, 1272758400),
(5, '谷歌"街景车"多年盗窃私人WIFI数据 曾一度否认', 'AA县', 0, 1272758400),
(6, '空难中儿童是否更容易幸存:空难的求生三杀手', 'BB县', 0, 1272758400);
想将列出AA县到DD县的发表排名,同时要求,不管该县是否发表过文章,也显示该列排名我现有统计B表的语句如下,不知道怎么合并统计
SELECT bmname, count( 'id' ) AS arcnum
FROM `sql_content`
WHERE pubdate >1270080000
AND arcrank =0
GROUP BY bmname
ORDER BY arcnum DESC
LIMIT 0 , 30望高手指教
select sname
from stu
where ...
and ....
group by....select did
from dept
where ...and ....
group by....这是两个表的查询 如果加上自己的条件就成了对量表的分别查询那么你要吧量表查到一块那么可以这样:
select s.sname,d.did
from stu s,dept d
where ....
and ....
group by....明白我的意思?
mysql> select * from sql_bumeng;
+----+--------+--------+------------+
| id | bmname | arcnum | arctime |
+----+--------+--------+------------+
| 1 | AA县 | 5 | 1272758400 |
| 2 | BB县 | 8 | 1272758400 |
+----+--------+--------+------------+
2 rows in set (0.00 sec)mysql> select * from sql_content;
+----+---------------------------------------------+--------+---------+------------+
| id | title | bmname | arcrank | pubdate |
+----+---------------------------------------------+--------+---------+------------+
| 1 | 武汉一逃犯看完法治报道后到报社自首 | AA县 | 0 | 1272758400 |
| 2 | 解放军首次在全军内对军事训练费用审计调查 | BB县 | 0 | 1272758400 |
| 3 | 美媒称菲律宾新总统欲与中国在南沙展开合作 | CC县 | 0 | 1270080000 |
| 4 | 食品工程博士称食疗不靠谱 如果有效纯属巧合 | DD县 | 0 | 1272758400 |
| 5 | 谷歌"街景车"多年盗窃私人WIFI数据 曾一度否认 | AA县 | 0 | 1272758400 |
| 6 | 空难中儿童是否更容易幸存:空难的求生三杀手 | BB县 | 0 | 1272758400 |
+----+---------------------------------------------+--------+---------+------------+
6 rows in set (0.00 sec)mysql>
from sql_bumeng a left join sql_content b on a.bmname=b.bmname
group by a.bmname
order by 2 desc
bbname arcnum
BB县 10
AA县 7
DD县 1
CC县 0即,统计出B表arcnum后,加与A表中对应名称的arcnum数值,并以arcnum从大到小排序,谢谢
bbname arcnum
BB县 10
AA县 7
DD县 1
CC县 0解释一下,为什么没有FF县 0?
你的 `sql_bumeng` 似乎和你的结果没有任何关系。如果这个表与问题无关,建议不要贴出来,反而干扰别人的理解。
+----+---------------------------------------------+--------+---------+------------+
| id | title | bmname | arcrank | pubdate |
+----+---------------------------------------------+--------+---------+------------+
| 1 | 武汉一逃犯看完法治报道后到报社自首 | AA县 | 0 | 1272758400 |
| 2 | 解放军首次在全军内对军事训练费用审计调查 | BB县 | 0 | 1272758400 |
| 3 | 美媒称菲律宾新总统欲与中国在南沙展开合作 | CC县 | 0 | 1270080000 |
| 4 | 食品工程博士称食疗不靠谱 如果有效纯属巧合 | DD县 | 0 | 1272758400 |
| 5 | 谷歌"街景车"多年盗窃私人WIFI数据 曾一度否认 | AA县 | 0 | 1272758400 |
| 6 | 空难中儿童是否更容易幸存:空难的求生三杀手 | BB县 | 0 | 1272758400 |
+----+---------------------------------------------+--------+---------+------------+
6 rows in set (0.00 sec)mysql>
是这样子的,我有另外一个表:
CREATE TABLE IF NOT EXISTS `sql_bmlist` (
`id` int(6) unsigned NOT NULL auto_increment,
`bmname` varchar(50) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;--
-- 导出表中的数据 `sql_bmlist`
--INSERT INTO `sql_bmlist` (`id`, `bmname`) VALUES
(1, 'AA县'),
(2, 'BB县'),
(3, 'CC县'),
(4, 'DD县');
而 sql_content 表查询的条件是sql_content列中的bmname等于sql+bmlist中的条件,才参与查询
把查询条件分别拆出来的结果是这样子的:
查询sql_bumeng表
SELECT `bmname` , `arcnum`
FROM `sql_bumeng`
ORDER BY arcnum DESC
LIMIT 0 , 30
得到的结果如下:
bmname arcnum
BB县 8
AA县 5查询sql_content表
SELECT bmname, count( 'id' ) AS arcnum
FROM `sql_content`
WHERE pubdate >1270080000
AND arcrank =0
GROUP BY bmname
ORDER BY arcnum DESC
LIMIT 0 , 30
得到的结果如下:
bmname arcnum
AA县 2
BB县 2
DD县 1其中上一帖中的:BB 县等于10 就是将以上结果相加得到的数值现想请教ACMAIN_CHM 如果把查询语句合并起来,且 arcnum为空或为0时,只要条件符合sql_bmlist中的名字,都纳入统计,谢谢。 我表达有些问题,请谅解
-> from `sql_bmlist` a left join (
-> select `bmname`,`arcnum` from sql_bumeng
-> union all
-> SELECT bmname, count( 'id' ) AS arcnum
-> FROM `sql_content`
-> WHERE pubdate >1270080000
-> AND arcrank =0
-> GROUP BY bmname
-> ) b
-> on a.bmname=b.bmname
-> group by a.bmname
-> order by 2 desc;
+--------+--------+
| bmname | arcnum |
+--------+--------+
| BB县 | 10 |
| AA县 | 7 |
| DD县 | 1 |
| CC县 | 0 |
+--------+--------+
4 rows in set (0.00 sec)mysql>