Nano Hash - криптовалюты, майнинг, программирование

Найдите% дней недели, используя метку времени из базы данных MySQL.

У меня есть таблица MySQL DB под названием «покупки», заполненная записями о различных транзакциях. Я хочу узнать, какой% транзакций произошел в определенный день недели, и мне было интересно, как я могу добиться этого с помощью SQL. У меня есть поле в этой таблице под названием «отправлено», которое содержит стандартную временную метку unix, когда транзакция была записана.

Что у меня есть до сих пор:

SELECT COUNT(DISTINCT DATE_FORMAT(submitted,%a)) FROM purchases;

Моя конечная цель - создать таблицу с% всех транзакций в заданные дни с понедельника по воскресенье.

Моя структура таблицы выглядит следующим образом:

CREATE TABLE IF NOT EXISTS `purchases` (<br />
  `id` int(11) NOT NULL AUTO_INCREMENT,<br />
  `orderinfo` varchar(50) NOT NULL,<br />
  `amount` varchar(5) NOT NULL,<br />
  `reference` varchar(15) NOT NULL,<br />
  `name` varchar(50) NOT NULL,<br />
  `address` varchar(100) NOT NULL,
  `town` varchar(50) NOT NULL,<br />
  `postcode` varchar(12) NOT NULL,<br />
  `submitted` int(11) NOT NULL,<br />
  UNIQUE KEY `id` (`id`)<br />
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
04.03.2015

  • Вы должны начать с поиска и просмотра функций даты mysql. 04.03.2015
  • Вы уже пытались написать какой-либо SQL для достижения этой цели? 04.03.2015
  • Да и не могу заставить его работать. Скоро выложу свои работы. Спасибо 04.03.2015
  • Вот почему вы действительно должны использовать правильные типы данных для полей. Вам лучше обновить поля отметки времени на DATETIME. 04.03.2015

Ответы:


1

Преобразуйте отметку времени в дату, а затем возьмите COUNT, это будет получать количество, а также процент

SELECT date ( from_unixtime(submitted) ), count(*) as `count`, count(*)/(select count(*) from purchases)*100 as percentage
FROM purchases
GROUP BY date ( from_unixtime(submitted) ); 
04.03.2015
  • Привет, я добавил свою структуру таблицы, это здорово, спасибо за быстрый ответ, но все записи возвращаются как отдельные. 04.03.2015
  • Нам также нужно исключить ('часы', 'минуты', ..), тогда GROUP BY покажет количество. Я собираюсь дать полный запрос. DATE() будет извлекать дату из даты :-) 04.03.2015
  • Большое спасибо, я пытался буквально весь день!! 04.03.2015
  • Проверьте окончательный вариант сейчас, так как я не могу проверить себя 04.03.2015

  • 2

    Вы можете получить то, что хотите, с помощью двух вложенных запросов, подобных этому (разделенных на большее количество строк и с отступом для лучшей читабельности)

    SELECT
        DAYOFWEEK(FROM_UNIXTIME(`submitted`)),
        100 * COUNT(*) /
            (SELECT COUNT(*) from `purchases`)
    FROM
        `purchases`
    GROUP BY
        DAYOFWEEK(FROM_UNIXTIME(`submitted`))
    

    Обратите внимание, что внутренний запрос (SELECT COUNT(*) from purchases) используется для получения общего количества покупок, поскольку вам нужно число в процентах.

    mysql DAYOFWEEK() возвращает не название дня, а порядковый номер от 1 до 7. Вы можете посмотреть здесь для справки о функциях даты и времени mysql: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

    Если вам просто нужен запрос, то все готово.

    Если вы хотите создать представление с помощью этого запроса, вы не сможете этого сделать, потому что mysql не допускает вложенных SELECT в определении представления. Затем вы разделите задание на два представления, одно из которых просто вычисляет общее количество записей, а второе — вычисляет процент.


    Последнее замечание о производительности:

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

    Если вы затем планируете запускать запрос очень часто, это нехорошо.

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

    Когда вы обновляете subitted, обновите также submitted_dayofweek, сохраняя DAYOFWEEK(FROM_UNIXTIME(submitted)).

    Наконец, убедитесь, что submitted_dayofweek проиндексирован.

    Запрос становится

    SELECT
        `submitted_dayofweek`,
        100 * COUNT(*) /
            (SELECT COUNT(*) from `purchases`)
    FROM
        `purchases`
    GROUP BY
        `submitted_dayofweek`
    

    и будет работать очень быстро по цене немного большего используемого места для хранения.

    04.03.2015
  • Спасибо, Паоло, очень ценю!! 04.03.2015
  • Пожалуйста, я надеюсь, что мой ответ позволит вам понять, как работает запрос. 04.03.2015
  • Новые материалы

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

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..