[RUBY] Énumération des rails d'agrégation à partir de SQL

introduction

Pour des raisons de sécurité, vous ne pourrez peut-être pas utiliser la console rails en production. Lors de l'examen des données enregistrées à ce moment, je pense que vous pouvez enquêter sur Redash, etc. avec SQL de BI Tool. Je vais résumer comment afficher l'énumération à ce moment-là d'une manière facile à lire.

Méthode d'agrégation (méthode)

Le rôle est défini dans enum comme suit:

enum role: { user: 1, admin: 9 }

Je vais enquêter sur les données comme ça.

name role
test_1 1
test_2 1
admin_1 9
admin_2 9

Puisqu'il s'agit de SQL pour l'investigation, utilisez des sous-requêtes sans vous soucier de la vitesse.


SELECT td.name, td.role, enum_code.name
FROM test_data AS td
JOIN
(
     SELECT 'user' AS name, 0 AS code UNION ALL
     SELECT 'admin' AS name, 9 AS code
) AS enum_code
ON td.role = enum_code.code;

Vous devriez voir le nom du rôle avec le résultat suivant:

name role role_name
test_1 0 user
test_2 0 user
admin_1 9 admin
admin_2 9 admin

De côté

Ce qui suit est un aparté, mais je voudrais expliquer des informations supplémentaires.

Environnement éprouvé

Table temporaire à rejoindre

SELECT 'user' AS name, 0 AS code

Vous pouvez créer une table temporaire comme celle-ci en exécutant.

name code
user 0

J'ai fait plusieurs lignes et les ai jointes ligne par ligne avec ʻUNION ALL`.

name code
user 0
admin 9

Ensuite, JOIN joint par colonne.

name role role_name
test_1 0 user
test_2 0 user
admin_1 9 admin
admin_2 9 admin

Omission de FROM

https://oss-db.jp/dojo/dojo_09

Dans MySQL et PostgreSQL, vous pouvez écrire des instructions SQL sans FROM. Puisque FROM ne peut pas être omis dans Oracle et DB2, utilisez «FROM dual».

SELECT 'user' AS name, 0 AS code FROM dual;

https://docs.oracle.com/cd/E16338_01/server.112/b56299/queries009.htm https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.1.0/com.ibm.db2.luw.apdv.porting.doc/doc/r0052874.html

avec clause

Puisque PostgreSQL peut utiliser la clause with, vous pouvez d'abord écrire une table temporaire. Cette méthode d'écriture est utilisée lors de la création d'une requête pour l'agrégation car le traitement peut être suivi dans l'ordre du haut. Dans le cas de MySQL, il semble qu'il puisse être utilisé à partir de la version 8.0.

WITH enum_code AS (
    SELECT 'user' AS name, 0 AS code UNION ALL
    SELECT 'admin' AS name, 9 AS code
)
SELECT td.name, td.role, enum_code.name AS role_name
FROM test_data AS td
JOIN enum_code
ON td.role = enum_code.code;

https://www.postgresql.jp/document/12/html/queries-with.html https://dev.mysql.com/doc/refman/8.0/en/with.html

Recommended Posts

Énumération des rails d'agrégation à partir de SQL
Cloud9 (Rails) de Github
Ajouter et enregistrer à partir de la création d'une base de données de rails