Наличие двух (или трех?) Счетчиков в одном запросе MYSQL (через phpmyadmin) - PullRequest
1 голос
/ 03 февраля 2012

Я ценю, что это вопрос, который задавался несколько раз, я посмотрел на ответы, которые я могу найти, и не могу найти решение, которое соответствует моему конкретному набору данных ... (в основном из-за моего уровень новичков, и не совсем понимая синтаксические последствия для упорядочения различных элементов для запросов).

Я пытаюсь выполнить два «подсчета» в одной результирующей таблице - я могу просто получить отдельные таблицы - возможность агрегирования результатов значительно ускорит мой анализ ..

Конкретные запросы:

(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-й счет:

(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-х отсчетов (таблицы, условия группы и детали заказа) и разница в том, где условия.

Даже с запросом на два счета будут нулевые значения, где счет A будет приводить к другим наборам, отличным от счета B - поэтому я подумал, нужно ли, чтобы счетчик приводил к одной и той же базовой форме (т. Е. Одинаковые построения строк другие значения счетчика, а не счетчик отдельных построений строк, что приводит к нулевому возвращению для одного из счетчиков)

1 Ответ

3 голосов
/ 03 февраля 2012

Чтобы объединить (1) и (2), вы можете использовать конструкцию COUNT(distinct IF( .., .., ..)), а затем удалить условие WHERE на hasExtension, что позволяет объединять (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`;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...