返回多个计数值


Return multiple count values

这可能是一个简单的问题,我已经搜索过了,但不确定我想做什么的官方描述是什么…

我有一张表格,记录了建筑物的详细信息,有列记录,是否或没有记录,比如宽带、电话等…

我正在尝试构建一个返回每个值的查询,有点像一个报告,但我想保留不为每个值运行单独查询的地方(记住DRY!)。

如果我知道我在寻找"是"、"否"或"未记录",是否可以执行一个查询来分别返回所有3个值?

我目前只知道如何返回单个值,我不想创建一个充满重复代码的页面!

表:网站(原谅糟糕的布局!)

:ID--站点----------------BBAND----电话
:1-车站房屋-----是--------是
:2---德雷克斯大厦---是--------否
:3-避暑山庄----否---------------是
:4---展望之家---是--------是

当前代码是(我不知道如何进行多次计数):

$result=mysql_query("SELECT count(*) as bband from sites WHERE bband =     'Yes'");
$data=mysql_fetch_assoc($result);
echo "Broadband Yes:"; 
echo $data['bband'];

然后,我必须重复这个代码,表示"否",然后再次表示"未录制"。那个方法是错误的,因为它效率很低。

理想情况下,我希望能够回显/打印单个结果,这样我就可以将它们添加到表/布局中。

SELECT SUM(val = 'no')as count_no, SUM(val='yes') as count_yes, SUM(val='not') as count_not FROM...

如果val等于"no",则val="no"等于1;如果不等于,则等于0。因此,使用SUM(val='no')可以计算val='no]的情况。因此,您可以"计数"不同的val=片段,而无需将其放在sql语句的WHERE部分。

我想你正在寻找这样的东西:

SELECT *, COUNT(CASE WHEN value="yes" THEN 1 END) AS 'total_yes',
          COUNT(CASE WHEN value="no" THEN 1 END) AS 'total_no',
          COUNT(CASE WHEN value="not recorded" THEN 1 END) AS 'total_not_recorded'
FROM myTable