Mysql
 sql >> база данни >  >> RDS >> Mysql

Внедряване на трендови маркери, базирано на Mysql json

Не виждам основателна причина да използвате JSON тук. Също така не е ясно защо смятате, че „nosql схема " в MySQL би направило всичко по-добре.

Вероятно се нуждаете от нещо подобно:

CREATE TABLE TAG_COUNTER (
    account       varchar(36) NOT NULL,
    time_id       INT NOT NULL,
    tag_name      varchar(50) NOT NULL,
    counter       INT UNSIGNED NOT NULL,
    PRIMARY KEY   (account, time_id, tag_name)
);

Това ще опрости вашите запитвания. Инструкцията INSERT би изглеждала така:

INSERT INTO TAG_COUNTER
  (account, time_id, tag_name, counter)
VALUES
  ('google', 2018061023, 'tag1', 1),
  ('google', 2018061023, 'tag2', 1)
ON DUPLICATE KEY UPDATE counter = counter + VALUES(counter);

Инструкцията SELECT може да е нещо подобно

SELECT
    SUBSTRING(time_id, 1, 6) AS month,
    tag_name,
    SUM(counter) AS counter_agg
FROM TAG_COUNTER
GROUP BY month, tag_name
ORDER BY month, counter_agg DESC;

Имайте предвид, че не се опитах да оптимизирам таблицата/схемата за размера и производителността на данните. Това би бил друг въпрос. Но трябва да видите, че сега заявките са много по-прости.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel:Как да изтрия редове от множество таблица със същия идентификатор само с 1 заявка?

  2. как да използвам `charset` и `encoding` в `create_engine` на SQLAlchemy (за създаване на рамка с данни на pandas)?

  3. MySQL твърде дълга настройка за съкращаване/грешка на varchar

  4. Неволи на MariaDB 10 CentOS 7 при преместване на datadir

  5. Как да нулирате забравената парола за MySQL root?