Как правильно использовать concat в mySQL, чтобы получить процентную долю зарегистрированных инструментов, которые наиболее зарегистрированы

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

Это мои две таблицы:

$table_registration = $wpdb->prefix . 'registration';
$table_tools = $wpdb->prefix . 'tools';

таблица регистрации wp:

CREATE TABLE $table_registration
(
reg_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
dato date,
billedeURL VARCHAR(80) NOT NULL,
fiske_vaegt DECIMAL( 2,1 ) NOT NULL,
fiske_laengde INT NOT NULL,
reg_user_id BIGINT UNSIGNED NOT NULL,
reg_tools_id INT UNSIGNED NOT NULL

PRIMARY KEY (reg_id),
FOREIGN KEY (reg_user_id) REFERENCES wp_users(id),
FOREIGN KEY (reg_tools_id) REFERENCES $table_tools(tools_id)
)

таблица wp_tools:

CREATE TABLE $table_tools
(
tools_id INT UNSIGNED AUTO_INCREMENT NOT NULL,
tools_navn CHAR (20),

PRIMARY KEY (tools_id)
)

Я пытался создать правильный MySQL, но безуспешно, так что это то, что я делал до сих пор.

select l.*, concat(round(100 * count(t.reg_tools_id) / t2.cnt,0),'%')
from wp_registration l
left join wp_tools t on l.toolss_id = t.reg_id
cross join
(select count(*) cnt
from wp_registration
where reg_tools_id = 1) t2
group by l.reg_id;

Но это говорит мне, что каждый инструмент использовался в 50% случаев. что, очевидно, неправильно. У меня есть три инструмента, из которых пользователи могут выбирать, и сейчас у них есть 1 — два голоса и 2 — девять голосов и 3 — два голоса, всего 13 регистраций.

0

Решение

Надеюсь, я понимаю, что вам нужно!

SELECT
tools.tools_id,
((COUNT(*) / (SELECT COUNT(*) FROM registration)) * 100) AS percent
FROM
registration
JOIN
tools ON registration.reg_tools_id = tools.tools_id
GROUP BY
tools.tools_id
ORDER BY
percent DESC
LIMIT 1

Некоторые замечания:

  • Попробуй написать в чистом sql
  • Вам не нужен php-тег для этого вопроса
  • Минимизируйте свой код от ненужной части
  • Используйте функции concat и round на языке программирования, который вы используете не в SQL (я думаю, что вы используете здесь php, поэтому запрос затем получит результат и примените round и concat в инструкциях php)
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector