Count отображает только одну строку, несмотря на несколько строк в базе данных

0

Вот мой SQL-запрос:

SELECT 
    COUNT(CASE WHEN  'urgency'='1' THEN 1 END) AS verylow,
    COUNT(CASE WHEN  'urgency'='2' THEN 1 END) AS low,
    COUNT(CASE WHEN  'urgency'='3' THEN 1 END) AS standard,
    COUNT(CASE WHEN  'urgency'='4' THEN 1 END) AS high,
    COUNT(CASE WHEN  'urgency'='5' THEN 1 END) AS critical,
    tbl_users.userName
FROM 
    notes, tbl_users 
WHERE 
    notes.responsible = tbl_users.userID
    AND project_id = '4413' 
    AND (notes.status = 'Ongoing' OR notes.status = 'Not started')

и выход:

verylow   low   standard   high   critical    userName
5          1       2         1        1        Nick

Однако это неправильно, потому что у меня есть несколько пользователей в базе данных, которые назначили задачи. и это выглядит так в моей базе данных:

urgency userName
3       Nick
5       Nick
4       Nick
3       James
1       James
1       Nick
2       Nick
1       James
1       Nick
1       Nick

Любая идея, почему она не учитывает актуальность для другого пользователя и сколько у него разных сроков?

Теги:

2 ответа

3
Лучший ответ

То, что вы делаете, не совсем правильно. Если вы включите режим MySQL ONLY_FULL_GROUP_BY, вы получите предупреждение, потому что вы выбираете столбец, который не находится в предложении GROUP BY без применения функции агрегации. Поэтому вам нужно предложение GROUP BY.

Весь запрос должен выглядеть так:

SELECT 
    COUNT(CASE WHEN  'urgency'='1' THEN 1 END) AS verylow,
    COUNT(CASE WHEN  'urgency'='2' THEN 1 END) AS low,
    COUNT(CASE WHEN  'urgency'='3' THEN 1 END) AS standard,
    COUNT(CASE WHEN  'urgency'='4' THEN 1 END) AS high,
    COUNT(CASE WHEN  'urgency'='5' THEN 1 END) AS critical,
    tbl_users.userName
FROM 
    notes, tbl_users 
WHERE 
    notes.responsible = tbl_users.userID
    AND project_id = '4413' 
    AND (notes.status = 'Ongoing' OR notes.status = 'Not started')
GROUP BY tbl_users.userName;
  • 0
    Не могу поверить, я не проверял это! Спасибо!
0

С помощью COUNT вы объединяете свои строки. Поскольку не существует предложения GROUP BY, вы объединяете их в одну строку (а не, скажем, строку на пользователя).

Вы выбираете userName. Который? Когда вы выбираете только одну строку, СУБД выбирает один произвольно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню