SQL: Рассчитать процент в другой таблице и пользовательский процент для фильтрации? - PullRequest
0 голосов
/ 15 августа 2011

У меня есть 2 таблицы.Первый, называемый «пользователи», выглядит следующим образом:

id | Username
----------------------
1  | time
2  | bill
3  | jeff

Второй, называемый «сообщения», выглядит следующим образом:

id | user | category
----------------------
1  | bill | 3
2  | tim  | 1
3  | bill | 3
4  | bill | 2

Каждому другому номеру в столбце категорий соответствуетв категорию.

Я пытаюсь создать SQL-запрос, в котором все пользователи, у которых более 10% постов попадают в определенную категорию.Вот как выглядит мой текущий (не работающий) код для категории 3:

SELECT 
    u.Username, 
    (
        (SELECT COUNT(*) FROM posts WHERE user=u.Username AND category=3) 
        / (SELECT COUNT(*) FROM posts WHERE user=u.Username) 
        * 100
    ) AS percentage 
FROM users u 
WHERE percentage > 10

Теоретически этот запрос должен возвращать 'bill'.Тем не менее, это не работает!У меня где-нибудь есть синтаксическая ошибка или мой метод плохой / неправильный?

Ответы [ 2 ]

2 голосов
/ 15 августа 2011

Вместо использования всех этих подзапросов вы можете напрямую запросить таблицу posts:

SELECT Username,
    (SUM(Category = 3) / COUNT(*)) * 100 AS percentage 
FROM posts
GROUP BY 1
HAVING percentage > 10
1 голос
/ 15 августа 2011

Псевдоним процента не может существовать в предложении where. Вы должны использовать имеющий пункт.

SELECT 
    u.Username, 
    (
        (SELECT COUNT(*) FROM posts WHERE user=u.Username AND category=3) 
        / (SELECT COUNT(*) FROM posts WHERE user=u.Username) 
        * 100
    ) AS percentage 
FROM users u 
HAVING percentage > 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...