Я пытаюсь сделать так, чтобы этот запрос подсчитывал строки из другой таблицы, у которой есть имя пользователя, а затем смерти, у которой есть убийца. В таблице статистики есть 1 строка для имени пользователя, но несколько строк в таблице pvp с именем пользователя. Столбец смерти – это то же самое количество, что и столбцы «Убивает» по какой-то причине, кто-нибудь знает, почему? Вот мой запрос. Вот скрипт sql, я думаю, что я правильно понял, как использовать sqlfiddle: http://sqlfiddle.com/#!2/b793b/1
SELECT *, COUNT(pvptable.killer) as kills, COUNT(pvptable.username) as deaths, ROUND(COUNT(pvptable.killer) / COUNT(pvptable.username), 2) as kd FROM stats as st LEFT JOIN pvp as pvptable ON pvptable.killer=st.username WHERE st.username="Username";
SELECT st.*, SUM(pvp.killer = st.username) AS kills, SUM(pvp.username = st.username) as deaths FROM stats AS st LEFT JOIN pvp ON pvp.username = st.username OR pvp.killer = st.username WHERE st.username = "Username"
DEMO
Чтобы сделать это для всех, используйте GROUP BY
:
SELECT st.*, SUM(pvp.killer = st.username) AS kills, SUM(pvp.username = st.username) as deaths FROM stats AS st LEFT JOIN pvp ON pvp.username = st.username OR pvp.killer = st.username GROUP BY st.username
DEMO
COUNT(foo)
и COUNT(bar)
подсчитывают количество строк в наборе результатов, вы можете также сказать COUNT(*)
в обоих случаях.
Вам нужно COUNT(*) FROM ... GROUP BY killer
чтобы получить количество убийц, например. Не уверен, что структура таблицы даст вам полный ответ.