我很欣赏这是一个已被问过几次的问题,我已经查看了我能找到的答案,而且似乎无法找到适合我特定数据集的解决方案...(很可能是由于我新手级别,并没有真正完全理解为查询排序各种元素的语法含义)。
我正在尝试将两个'计数'运行到一个结果表中 - 我可以很好地获得各个表 - 能够汇总结果会大大加快我的分析..
具体查询是:
(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不同的集合 - 所以我想知道计数是否需要产生相同的基本形状(即相同的行构建,只是不同的计数值,而不是计算特定的行构建,导致其中一个计数的空返回
答案 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`;