现有两个表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望高手指教

解决方案 »

  1.   

    简单说明一下:
    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....明白我的意思?
      

  2.   

    基于以下提供的测试数据,你期望的正确显示结果是什么样?   参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
    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>
      

  3.   

    估计楼主想要这个。select a.bmname,count(b.bmname)
    from sql_bumeng a left join sql_content b on a.bmname=b.bmname
    group by a.bmname
    order by 2 desc
      

  4.   

    如果sql_bumeng表内容全的话,差不多楼上的就是正解。
      

  5.   

    不好意思,刚才停电,勿勿提交了问题,没有补全自己需要的信息需要的结果是这样子的:
    bbname arcnum
    BB县 10
    AA县 7
    DD县 1
    CC县 0即,统计出B表arcnum后,加与A表中对应名称的arcnum数值,并以arcnum从大到小排序,谢谢
      

  6.   

    需要的结果是这样子的:
    bbname arcnum
    BB县 10
    AA县 7
    DD县 1
    CC县 0解释一下,为什么没有FF县  0
    你的 `sql_bumeng`  似乎和你的结果没有任何关系。如果这个表与问题无关,建议不要贴出来,反而干扰别人的理解。
      

  7.   

    BB县 10这个10 是怎么根据下面数据来的?  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>
      

  8.   

    谢谢ACMAIN_CHM回复我的问题,
    是这样子的,我有另外一个表:
    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中的名字,都纳入统计,谢谢。 我表达有些问题,请谅解
      

  9.   

    mysql> select a.bmname,ifnull(sum(b.arcnum),0) as arcnum
        -> 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>
      

  10.   

    感谢 ACMAIN_CHM 每次都是你解决了我的问题,再次感谢