2012-02-03 44 views
1

我很欣賞這是一個問題已被問了幾次,我看了我能找到的答案,似乎無法找到一個適合我的特定數據集的解決方案...(主要可能是由於我的新手級別,並不完全理解排序查詢的各種元素的語法含義)。在一個查詢中有兩個(或三個?)計數MYSQL(通過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`; 

如果我想要做的是有可能,我真的很想看看我是否能impliment第3計:

(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 - 所以我想知道如果計數需要導致相同的基本形狀(即相同的行構建,只是不同的計數值,而不是指望特定行構建導致空換取數之一)

回答

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`; 
+0

作品像一個魅力 - 你,S女士/女士,是一位溫順的人士和學者。謝謝。出於好奇,IF語句中的NULL子句是幹什麼的? – Jay 2012-02-03 01:16:44

+0

這導致'COUNT'不計算任何東西 - 例如,SUM(IF(hasExtension,1,0))如hasExt'加1,如果你有擴展名,則加1,如果你不加。 'COUNT'的NULL值就像0一樣(gotcha:'COUNT(0)'和COUNT(NAME)'相同,因爲它仍然在計數器!)。我使用'COUNT'而不是'SUM'的原因是我不知道如何將'DISTINCT'合併到'SUM'中,但是我知道你可以將一個'DISTINCT'放到'COUNT'中。 – 2012-02-03 01:25:27

+0

好吧,我想我明白了,我會查看回報,以便更好地掌握參數的含義。順便說一下,這已經幫助我找到了影響許多用戶的非瑣碎髮展問題的確切例子。真棒。謝謝。 – Jay 2012-02-03 01:32:34

相關問題