在一个查询中有两个(或三个?)计数MYSQL(通过phpmyadmin)

时间:2012-02-03 00:24:01

标签: mysql count phpmyadmin

我很欣赏这是一个已被问过几次的问题,我已经查看了我能找到的答案,而且似乎无法找到适合我特定数据集的解决方案...(很可能是由于我新手级别,并没有真正完全理解为查询排序各种元素的语法含义)。

我正在尝试将两个'计数'运行到一个结果表中 - 我可以很好地获得各个表 - 能够汇总结果会大大加快我的分析..

具体查询是:

(1)

SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`
     , COUNT(distinct NAME) as NoExt 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID = 'MyVariableHere' 
  AND main_small.NAME = sourcelist.SourceFileName 
  AND sourcelist.hasExtension = 0 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` 
ORDER BY `DROID_V` ASC, `SIG_V` ASC, `SPEED`;

和(2)

SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`
     , COUNT(distinct NAME) as Ext 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID = 'MyVariableHere' 
  AND main_small.NAME = sourcelist.SourceFileName 
  AND sourcelist.hasExtension = 1 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` 
ORDER BY `DROID_V` ASC, `SIG_V` ASC, `SPEED`;

如果我想做的事情是可能的,我真的很想看看我是否可以恭维第三项:

(3)

SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`
     , COUNT(distinct NAME) as All 
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID = 'MyVariableHere' 
  AND main_small.NAME = sourcelist.SourceFileName
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` 
ORDER BY `DROID_V` ASC, `SIG_V` ASC, `SPEED`;

我想知道是否有人能够取消我所做的事情,让我知道我想要的是什么 - 这3个计数有一些共同的元素,(表格,小组条件和订单详情)不同的是WHERE条件。

即使使用两个计数查询,也会有空值,其中计数A将导致与计数B不同的集合 - 所以我想知道计数是否需要产生相同的基本形状(即相同的行构建,只是不同的计数值,而不是计算特定的行构建,导致其中一个计数的空返回

1 个答案:

答案 0 :(得分:3)

结合(1)& (2)您可以使用COUNT(distinct IF( .., .., ..))构造,然后删除hasExtension上的WHERE条件,允许您合并(3):

SELECT `PUID`,`DROID_V`,`SIG_V`,`SPEED`, 
    COUNT(distinct IF(sourcelist.hasExtension=1,NAME,NULL)) as Ext, 
    COUNT(distinct IF(sourcelist.hasExtension=0,NAME,NULL)) as NoExt,
    COUNT(distinct NAME) as `All`
FROM sourcelist, main_small 
WHERE sourcelist.SourcePUID = 'MyVariableHere' AND main_small.NAME = sourcelist.SourceFileName 
GROUP BY `PUID`,`DROID_V`,`SIG_V`,`SPEED` ORDER BY `DROID_V` ASC, `SIG_V` ASC, `SPEED`;