Выберите процент строк с разными значениями - PullRequest
2 голосов
/ 14 июля 2009

На моем веб-сайте я позволяю пользователям оценивать отдельные сообщения (3, 2, 1). Я использую следующий SQL (в MySQL), чтобы получить процент голосов каждого значения:

SELECT vote, COUNT(*) * t.factor AS pct
FROM ratings
JOIN (
    SELECT 100 / COUNT(*) AS factor
    FROM ratings
) AS t
GROUP BY vote
LIMIT 0, 30;

Это прекрасно работает для расчета процента строк для всей таблицы. Теперь мне нужны проценты только для определенного поста, обозначенные в таблице столбцом «id». Как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 14 июля 2009

Вопрос кажется немного вводящим в заблуждение ... но вот то, что я представляю, как это будет выглядеть.

SELECT vote, COUNT(*) * t.factor AS pct
FROM ratings
JOIN (
SELECT 100 / COUNT(*) AS factor
FROM ratings
where id = id of the post
) AS t
where id = id of the post
GROUP BY vote
1 голос
/ 14 июля 2009

Один способ, который работает, но мне посоветовали не самый эффективный в мире, заключается в следующем:

SELECT vote, COUNT(*) * t.factor AS pct
FROM ratings
JOIN (
    SELECT 100 / COUNT(*) AS factor
    FROM ratings
    WHERE id = 36
) AS t
WHERE id = 36
GROUP BY vote
LIMIT 0, 30;

Я пытался добавить предложение where к внутреннему и внешнему выборам, но не к обоим! Имеет смысл, конечно.

1 голос
/ 14 июля 2009

Если предположить, что в столбце голос содержится значение голоса, т. Е. (3,2,1), то вам потребуется следующий запрос для подсчета процентов за голос:

SELECT r.id, r.vote, SUM(r.vote)/t.totalVotes AS percentOfVotes
FROM ratings r
JOIN (SELECT id, COUNT(id) AS totalVotes
      FROM ratings
      GROUP BY id ) AS t ON t.id = r.id
WHERE r.id = @id -- id of post you want
GROUP BY r.id, r.vote
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...