使用查询从mysql表获取字段的总和

使用查询从mysql表获取字段的总和,mysql,Mysql,我的数据库中有下表 CREATE TABLE IF NOT EXISTS `client` ( `CARD_NO` varchar(15) NOT NULL, `F_NAME` varchar(20) NOT NULL, `L_NAME` varchar(20) NOT NULL, `SEX` varchar(5) NOT NULL, `DOB` date NOT NULL, `SUBCITY` varchar(10) NOT NULL, `KEBELE` varch

我的数据库中有下表

CREATE TABLE IF NOT EXISTS `client` (
  `CARD_NO` varchar(15) NOT NULL,
  `F_NAME` varchar(20) NOT NULL,
  `L_NAME` varchar(20) NOT NULL,
  `SEX` varchar(5) NOT NULL,
  `DOB` date NOT NULL,
  `SUBCITY` varchar(10) NOT NULL,
  `KEBELE` varchar(5) NOT NULL,
  `HOUSE_NO` varchar(10) NOT NULL,
  `TEL_NO` int(10) DEFAULT NULL,
  `REGION_NO` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`CARD_NO`),
  KEY `REGION_NO` (`REGION_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `client`
--

INSERT INTO `client` (`CARD_NO`, `F_NAME`, `L_NAME`, `SEX`, `DOB`, `SUBCITY`, `KEBELE`, `HOUSE_NO`, `TEL_NO`, `REGION_NO`) VALUES
('1', '', '', 'male', '0000-00-00', '', '', '', NULL, '01'),
('2', '', '', 'male', '0000-00-00', '', '', '', NULL, '02'),
('3', '', '', 'femal', '0000-00-00', '', '', '', NULL, '03'),
('4', '', '', 'femal', '0000-00-00', '', '', '', NULL, '04'),
('5', '', '', 'male', '0000-00-00', '', '', '', NULL, '05'),
('6', '', '', 'male', '0000-00-00', '', '', '', NULL, '05');

-- --------------------------------------------------------

--
-- Table structure for table `non_pregnant`
--

CREATE TABLE IF NOT EXISTS `non_pregnant` (
  `VCT_CODE` varchar(15) NOT NULL,
  `CARD_NO` varchar(15) DEFAULT NULL,
  `RISK_OF_HIV` varchar(30) NOT NULL,
  `PURPOSE` varchar(10) NOT NULL,
  PRIMARY KEY (`VCT_CODE`),
  KEY `CARD_NO` (`CARD_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `non_pregnant`
--

INSERT INTO `non_pregnant` (`VCT_CODE`, `CARD_NO`, `RISK_OF_HIV`, `PURPOSE`) VALUES
('1', '1', '', ''),
('2', '2', '', ''),
('3', '3', '', ''),
('4', '4', '', ''),
('5', '5', '', ''),
('6', '6', '', '');

-- --------------------------------------------------------

--
-- Table structure for table `non_pregnant_vct`
--

CREATE TABLE IF NOT EXISTS `non_pregnant_vct` (
  `VCT_CODE` varchar(15) NOT NULL DEFAULT '',
  `DATE_TESTED` date DEFAULT NULL,
  `TB_RESULT` varchar(10) NOT NULL,
  `HIV_RESULT` varchar(10) NOT NULL,
  `STD_RESULT` varchar(10) NOT NULL,
  PRIMARY KEY (`VCT_CODE`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `non_pregnant_vct`
--

INSERT INTO `non_pregnant_vct` (`VCT_CODE`, `DATE_TESTED`, `TB_RESULT`, `HIV_RESULT`, `STD_RESULT`) VALUES
('1', NULL, '', 'pos', ''),
('2', NULL, '', 'pos', ''),
('3', NULL, '', 'neg', ''),
('4', NULL, '', 'neg', ''),
('5', NULL, '', 'neg', ''),
('6', NULL, '', 'pos', '');

-- --------------------------------------------------------

--
-- Table structure for table `region`
--

CREATE TABLE IF NOT EXISTS `region` (
  `REGION_NO` varchar(10) NOT NULL,
  `REGION_NAME` varchar(10) NOT NULL,
  PRIMARY KEY (`REGION_NO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `region`
--

INSERT INTO `region` (`REGION_NO`, `REGION_NAME`) VALUES
('01', 'washington'),
('02', 'newyork'),
('03', 'london'),
('04', 'paris'),
('05', 'burlin');
这是我想要的输出

区域 女性 男性 全部的 试验 肯定的 试验 肯定的 试验 肯定的 这就是我试图解决的问题,但仍然是错误的

SELECT r.region_name, c.sex = 'male' as counting, c.sex = 'femal' as counting, v.hiv_result = 'pos' as MalePos from region r
left join client c
on c.region_no = r.region_no
left join non_pregnant p
on c.card_no = p.card_no
left join non_pregnant_vct v
on p.vct_code = v.vct_code
group by c.region_no;

你对你想要的输出的描述是惊人的不清楚,但我会试一试。试试这个:

SELECT
    r.region_name,
    SUM(c.sex = 'male') as NMale,
    SUM(c.sex = 'femal') as NFemale,
    SUM(v.hiv_result = 'pos') as TotalPos,
    SUM(c.sex = 'male' AND v.hiv_result = 'pos') as MalePos,
    SUM(c.sex = 'femal' AND v.hiv_result = 'pos') as FemalePos
FROM region r
LEFT JOIN client c ON c.region_no = r.region_no
LEFT JOIN non_pregnant p ON c.card_no = p.card_no
LEFT JOIN non_pregnant_vct v ON p.vct_code = v.vct_code
GROUP BY c.region_no

您得到了什么错误消息?您得到了什么输出?它与应该正确的东西相比如何?你可能想详细说明一下,并在这里给我们一些帮助。出于好奇,额外的性别瓦尔查真的那么贵吗?(“femal”看起来很奇怪)@sase,请告诉我们你想在输出的每一列中得到什么,而不仅仅是列名。谢谢,伙计……我很感激你的回答……我几乎要对你的代码做一点修改,它工作得很完美……非常感谢。