2014-02-18 2 views
0

У меня есть следующий запрос, чтобы подсчитать количество устройств в моей базе данных. Я пытаюсь добавить предложение WHERE, чтобы выбрать устройство и считать с именем «iphone».Предложение WHERE с внутренним соединением

SELECT device, count(*) AS count, sum(100)/total AS percentage 
FROM devices WHERE device='apple' 
CROSS JOIN (
SELECT count(*) AS total 
FROM devices 
)x 
GROUP BY 1 

Я попытался построить разные запросы, но все они приводят к ошибке mysql. Какова правильная позиция предложения WHERE?

ответ

2

WHERE приходит послеFROM и перед GROUP BY

+1

(и после того, как РЕГИСТРИРУЙТЕСЬ тоже) – Strawberry

0
SELECT device, count(*) AS count, sum(100)/total AS percentage 
FROM devices 
INNER JOIN (
SELECT count(*) AS total 
FROM devices 
)x 
WHERE device='apple' 
GROUP BY 1 
0

Кстати, вы можете переписать этот запрос, как:

SELECT 'apple' as device, sum(device = 'apple') AS count, 
     100 * sum(device = 'apple')/count(*) AS percentage 
FROM devices ; 

Это устраняет дополнительное сканирование таблицы для расчета общего и join (что действительно дешево, потому что есть только один ряд в x.

0

Где идет перед группой по и Fater от и присоединиться:

SELECT device, count(*) AS count, sum(100)/total AS percentage 
FROM devices 
CROSS JOIN (
SELECT count(*) AS total 
FROM devices 
)x 
WHERE device='apple' 
GROUP BY 1 
Смежные вопросы