[RUBY] Aggregate Rails-Aufzählung aus SQL

Einführung

Aus Sicherheitsgründen können Sie die Rails-Konsole möglicherweise nicht in der Produktion verwenden. Bei der Untersuchung der zu diesem Zeitpunkt registrierten Daten denke ich, dass Sie Redash usw. mit SQL aus dem BI Tool untersuchen können. Ich werde zusammenfassen, wie die Aufzählung zu diesem Zeitpunkt auf leicht lesbare Weise angezeigt wird.

Aggregationsmethode (Methode)

Die Rolle wird in enum wie folgt definiert:

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

Ich werde die Daten so untersuchen.

name role
test_1 1
test_2 1
admin_1 9
admin_2 9

Verwenden Sie Unterabfragen, ohne sich Gedanken über die Geschwindigkeit machen zu müssen, da es sich um SQL für Untersuchungen handelt.


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;

Sie sollten den Rollennamen mit folgendem Ergebnis sehen:

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

Beiseite

Das Folgende ist eine Seite, aber ich möchte zusätzliche Informationen erklären.

Versuchte Umgebung

Temporärer Tisch zum Beitreten

SELECT 'user' AS name, 0 AS code

Sie können eine solche temporäre Tabelle erstellen, indem Sie ausführen.

name code
user 0

Ich habe mehrere Zeilen erstellt und sie Zeile für Zeile mit "UNION ALL" verbunden.

name code
user 0
admin 9

Dann wird JOIN nach Spalten verbunden.

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

Auslassung von FROM

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

In MySQL und PostgreSQL können Sie SQL-Anweisungen ohne FROM schreiben. Da FROM in Oracle und DB2 nicht weggelassen werden kann, verwenden Sie "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

mit Klausel

Da PostgreSQL die with-Klausel verwenden kann, können Sie zuerst eine temporäre Tabelle schreiben. Diese Schreibmethode wird beim Erstellen einer Abfrage für die Aggregation verwendet, da die Verarbeitung in der Reihenfolge von oben verfolgt werden kann. Im Fall von MySQL scheint es, dass es ab 8.0 verwendet werden kann.

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

Aggregate Rails-Aufzählung aus SQL
Cloud9 (Rails) von Github
Hinzufügen und Speichern von Rails-Datenbankerstellung