- Kategorien:
PIVOT¶
Rotiert eine Tabelle, indem die eindeutigen Werte aus einer Spalte im Eingabeausdruck in mehrere Spalten verwandelt und Ergebnisse bei Bedarf für alle verbleibenden Spaltenwerte aggregiert werden. Bei einer Abfrage wird er in der FROM-Klausel nach dem Tabellennamen oder der Unterabfrage angegeben.
Der Operator unterstützt die integrierten Aggregatfunktionen AVG, COUNT, MAX, MIN und SUM.
PIVOT kann dazu dienen, eine schmale Tabelle (zum Beispiel empid
, month
, sales
) in eine breitere Tabelle zu verwandeln (zum Beispiel empid
, jan_sales
, feb_sales
, mar_sales
).
- Siehe auch:
Syntax¶
SELECT ...
FROM ...
PIVOT ( <aggregate_function> ( <pivot_column> )
FOR <value_column> IN (
<pivot_value_1> [ , <pivot_value_2> ... ]
| ANY [ ORDER BY ... ]
| <subquery>
)
[ DEFAULT ON NULL (<value>) ]
)
[ ... ]
Parameter¶
aggregate_function
Die Aggregatfunktion zum Zusammenfassen der gruppierten Werte aus
pivot_column
.pivot_column
Die Spalte aus der Quelltabelle oder Unterabfrage, die aggregiert wird.
value_column
Die Spalte aus der Quelltabelle oder Unterabfrage, die die Werte enthält, aus denen Spaltennamen generiert werden.
pivot_value_N
Eine Liste von Werten für die Pivotspalte, die in den Abfrageergebnissen in Überschriften pivotiert werden.
ANY [ ORDER BY ... ]
Pivot auf alle diskreten Werte der Pivot-Spalte. Um die Reihenfolge der Pivot-Spalten in der Ausgabe zu steuern, geben Sie nach dem Schlüsselwort ANY eine ORDER BY-Klausel an. Wenn die Pivot-Spalte NULL-Werte enthält, wird NULL ebenfalls als Pivot-Wert behandelt.
subquery
Pivot auf alle in der Unterabfrage gefundenen Werte. Das Schlüsselwort DISTINCT ist erforderlich, wenn die Unterabfrage eine ORDER BY-Klausel enthält. Die Unterabfrage muss eine unkorrelierte Unterabfrage sein, die eine einzelne Spalte zurückgibt. Die Pivotierung wird für alle diskreten Werte ausgeführt, die von der Unterabfrage zurückgegeben werden. Weitere Informationen zu unkorrelierten Unterabfragen finden Sie unter Verwenden von Unterabfragen.
DEFAULT ON NULL
(value
)Ersetzt alle NULL-Werte im Pivot-Ergebnis durch den angegebenen Standardwert. Der Standardwert kann ein beliebiger skalarer Ausdruck sein, der nicht von der Pivot- und Aggregationsspalte abhängt.
Nutzungshinweise¶
Snowflake unterstützt dynamisches Pivot. Bei der dynamischen Pivot-Abfrage wird das Schlüsselwort ANY oder eine Unterabfrage in der PIVOT-Unterklausel verwendet, anstatt die Pivot-Werte explizit anzugeben.
Wenn in einer Definition der Ansicht ein dynamisches Pivot verwendet wird, können Abfragen in der Ansicht fehlschlagen, wenn sich die zugrunde liegenden Daten ändern, sodass die Pivot-Ausgabespalten geändert werden.
Dynamische Pivotierung wird im Body einer gespeicherten Prozedur oder einer benutzerdefinierten Funktion (UDF) nicht unterstützt.
Eine Pivot-Abfrage, die kein dynamisches Pivot verwendet, kann eine Ausgabe mit doppelten Spalten zurückgeben. Wir empfehlen, eine Ausgabe mit doppelten Spalten zu vermeiden. Eine dynamische Pivot-Abfrage entdupliziert doppelte Spalten.
Eine Pivot-Abfrage, die kein dynamisches Pivot verwendet, schlägt möglicherweise fehl, wenn sie versucht, mit CAST eine VARIANT-Spalte in einen anderen Datentyp umzuwandeln. Bei dynamischen Pivot-Abfragen gibt es diese Beschränkung nicht.
Derzeit erlaubt die PIVOT-Semantik keine Mehrfachaggregationen, aber Sie können ähnliche Ergebnisse erzielen, indem Sie PIVOT mit dem Operator UNION verwenden. Ein Beispiel dazu finden Sie unter Dynamisches Pivot mit mehreren Aggregationen mit UNION.
Beispiele¶
In den PIVOT-Beispielen wird die folgende quarterly_sales
-Tabelle verwendet:
CREATE OR REPLACE TABLE quarterly_sales(
empid INT,
amount INT,
quarter TEXT)
AS SELECT * FROM VALUES
(1, 10000, '2023_Q1'),
(1, 400, '2023_Q1'),
(2, 4500, '2023_Q1'),
(2, 35000, '2023_Q1'),
(1, 5000, '2023_Q2'),
(1, 3000, '2023_Q2'),
(2, 200, '2023_Q2'),
(2, 90500, '2023_Q2'),
(1, 6000, '2023_Q3'),
(1, 5000, '2023_Q3'),
(2, 2500, '2023_Q3'),
(2, 9500, '2023_Q3'),
(3, 2700, '2023_Q3'),
(1, 8000, '2023_Q4'),
(1, 10000, '2023_Q4'),
(2, 800, '2023_Q4'),
(2, 4500, '2023_Q4'),
(3, 2700, '2023_Q4'),
(3, 16000, '2023_Q4'),
(3, 10200, '2023_Q4');
Die folgenden Beispiele verwenden PIVOT:
Automatisches Pivot auf allen diskreten Spaltenwerten mit dynamischem Pivot
Pivot auf einer angegebenen Liste von Spaltenwerten für die Pivot-Spalte
Automatisches Pivot auf allen diskreten Spaltenwerten mit dynamischem Pivot¶
In der Tabelle quarterly_sales
können Sie mit dem Schlüsselwort ANY auf der Spalte amount
pivotieren, um den Gesamtumsatz pro Mitarbeiter für alle einzelnen Quartale zu summieren. Geben Sie ORDER BY an, damit die Pivot-Spalten in der richtigen Reihenfolge stehen:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (ANY ORDER BY quarter))
ORDER BY empid;
+-------+-----------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-------+-----------+-----------+-----------+-----------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | NULL | NULL | 2700 | 28900 |
+-------+-----------+-----------+-----------+-----------+
Dynamisches Pivot auf Spaltenwerte mit einer Unterabfrage¶
Angenommen, dass zusätzlich zur Tabelle quarterly_sales
eine Tabelle ad_campaign_types_by_quarter
die Typen von Werbeanzeigen erfasst, die in bestimmten Quartalen geschaltet werden. Diese Tabelle hat die folgende Struktur und Daten:
CREATE OR REPLACE TABLE ad_campaign_types_by_quarter(
quarter VARCHAR,
television BOOLEAN,
radio BOOLEAN,
print BOOLEAN)
AS SELECT * FROM VALUES
('2023_Q1', TRUE, FALSE, FALSE),
('2023_Q2', FALSE, TRUE, TRUE),
('2023_Q3', FALSE, TRUE, FALSE),
('2023_Q4', TRUE, FALSE, TRUE);
Sie können eine Unterabfrage in einer Pivot-Abfrage verwenden, um die Summe der Umsätze in den Quartalen zu ermitteln, in denen bestimmte Anzeigenkampagnen durchgeführt wurden. Die folgende Pivot-Abfrage gibt zum Beispiel nur Daten für Quartale mit TV-Kampagnen zurück:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (
SELECT DISTINCT quarter
FROM ad_campaign_types_by_quarter
WHERE television = TRUE
ORDER BY quarter))
ORDER BY empid;
+-------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q4' |
|-------+-----------+-----------|
| 1 | 10400 | 18000 |
| 2 | 39500 | 5300 |
| 3 | NULL | 28900 |
+-------+-----------+-----------+
Dynamisches Pivot mit mehreren Aggregationen mit UNION¶
Sie können den UNION-Operator verwenden, um mehrere Aggregationen in einem einzigen Resultset anzuzeigen. Dieses Beispiel verwendet dynamisches Pivot und den UNION-Operator, um die folgenden Informationen für jeden Mitarbeiter in jedem Quartal anzuzeigen:
Der durchschnittliche Betrag eines Verkaufs unter Verwendung der Funktion AVG.
Der Verkauf mit dem höchsten Wert unter Verwendung der Funktion MAX.
Der Verkauf mit dem niedrigsten Wert unter Verwendung der Funktion MIN.
Die Anzahl der Verkäufe unter Verwendung der Funktion COUNT.
Der Gesamtbetrag für alle Verkäufe unter Verwendung der Funktion SUM.
Führen Sie die Abfrage aus:
SELECT 'Average sale amount' AS aggregate, *
FROM quarterly_sales
PIVOT(AVG(amount) FOR quarter IN (ANY ORDER BY quarter))
UNION
SELECT 'Highest value sale' AS aggregate, *
FROM quarterly_sales
PIVOT(MAX(amount) FOR quarter IN (ANY ORDER BY quarter))
UNION
SELECT 'Lowest value sale' AS aggregate, *
FROM quarterly_sales
PIVOT(MIN(amount) FOR quarter IN (ANY ORDER BY quarter))
UNION
SELECT 'Number of sales' AS aggregate, *
FROM quarterly_sales
PIVOT(COUNT(amount) FOR quarter IN (ANY ORDER BY quarter))
UNION
SELECT 'Total amount' AS aggregate, *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (ANY ORDER BY quarter))
ORDER BY aggregate, empid;
+---------------------+-------+--------------+--------------+--------------+--------------+
| AGGREGATE | EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|---------------------+-------+--------------+--------------+--------------+--------------|
| Average sale amount | 1 | 5200.000000 | 4000.000000 | 5500.000000 | 9000.000000 |
| Average sale amount | 2 | 19750.000000 | 45350.000000 | 6000.000000 | 2650.000000 |
| Average sale amount | 3 | NULL | NULL | 2700.000000 | 9633.333333 |
| Highest value sale | 1 | 10000.000000 | 5000.000000 | 6000.000000 | 10000.000000 |
| Highest value sale | 2 | 35000.000000 | 90500.000000 | 9500.000000 | 4500.000000 |
| Highest value sale | 3 | NULL | NULL | 2700.000000 | 16000.000000 |
| Lowest value sale | 1 | 400.000000 | 3000.000000 | 5000.000000 | 8000.000000 |
| Lowest value sale | 2 | 4500.000000 | 200.000000 | 2500.000000 | 800.000000 |
| Lowest value sale | 3 | NULL | NULL | 2700.000000 | 2700.000000 |
| Number of sales | 1 | 2.000000 | 2.000000 | 2.000000 | 2.000000 |
| Number of sales | 2 | 2.000000 | 2.000000 | 2.000000 | 2.000000 |
| Number of sales | 3 | 0.000000 | 0.000000 | 1.000000 | 3.000000 |
| Total amount | 1 | 10400.000000 | 8000.000000 | 11000.000000 | 18000.000000 |
| Total amount | 2 | 39500.000000 | 90700.000000 | 12000.000000 | 5300.000000 |
| Total amount | 3 | NULL | NULL | 2700.000000 | 28900.000000 |
+---------------------+-------+--------------+--------------+--------------+--------------+
Dynamisches Pivot mit einer Verknüpfungsabfrage¶
Um Pivot in einer Abfrage mit einer Verknüpfung auszuführen, können Sie einen allgemeinen Tabellenausdruck (Common Table Expression, CTE) für die Pivot-Abfrage verwenden.
Nehmen wir zum Beispiel an, eine einfache Tabelle ordnet Mitarbeiter Managern zu:
CREATE OR REPLACE TABLE emp_manager(
empid INT,
managerid INT)
AS SELECT * FROM VALUES
(1, 7),
(2, 8),
(3, 9);
SELECT * from emp_manager;
+-------+-----------+
| EMPID | MANAGERID |
|-------+-----------|
| 1 | 7 |
| 2 | 8 |
| 3 | 9 |
+-------+-----------+
Führen Sie eine Abfrage aus, die die Tabelle emp_manager
mit der Tabelle quarterly_sales
verknüpft und die Spalte amount
in der Tabelle quarterly_sales
pivotiert:
WITH
src AS
(
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (ANY ORDER BY quarter))
)
SELECT em.managerid, src.*
FROM emp_manager em
JOIN src ON em.empid = src.empid
ORDER BY empid;
+-----------+-------+-----------+-----------+-----------+-----------+
| MANAGERID | EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-----------+-------+-----------+-----------+-----------+-----------|
| 7 | 1 | 10400 | 8000 | 11000 | 18000 |
| 8 | 2 | 39500 | 90700 | 12000 | 5300 |
| 9 | 3 | NULL | NULL | 2700 | 28900 |
+-----------+-------+-----------+-----------+-----------+-----------+
Pivot auf einer angegebenen Liste von Spaltenwerten für die Pivot-Spalte¶
Ausgehend von der Tabelle quarterly_sales
können Sie in der Spalte amount
den Gesamtumsatz pro Mitarbeiter für die angegebenen Quartale summieren:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (
'2023_Q1',
'2023_Q2',
'2023_Q3'))
ORDER BY empid;
+-------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' |
|-------+-----------+-----------+-----------|
| 1 | 10400 | 8000 | 11000 |
| 2 | 39500 | 90700 | 12000 |
| 3 | NULL | NULL | 2700 |
+-------+-----------+-----------+-----------+
Sie können auf allen Quartalen in der Spalte amount
pivotieren, indem Sie die folgende Abfrage ausführen:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (
'2023_Q1',
'2023_Q2',
'2023_Q3',
'2023_Q4'))
ORDER BY empid;
+-------+-----------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-------+-----------+-----------+-----------+-----------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | NULL | NULL | 2700 | 28900 |
+-------+-----------+-----------+-----------+-----------+
Sie können die Spaltennamen in der Ausgabe mit der AS-Klausel ändern. Um zum Beispiel die Spaltennamen zu kürzen und ohne Anführungszeichen anzuzeigen, führen Sie die folgende Abfrage aus:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (
'2023_Q1',
'2023_Q2',
'2023_Q3',
'2023_Q4')) AS p (employee, q1, q2, q3, q4)
ORDER BY employee;
+----------+-------+-------+-------+-------+
| EMPLOYEE | Q1 | Q2 | Q3 | Q4 |
|----------+-------+-------+-------+-------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | NULL | NULL | 2700 | 28900 |
+----------+-------+-------+-------+-------+
Sie können auch bestimmte Pivot-Spalten in der SELECT-Liste auflisten und die Spaltennamen ändern:
SELECT empid,
"'2023_Q1'" AS q1,
"'2023_Q2'" AS q2,
"'2023_Q3'" AS q3,
"'2023_Q4'" AS q4
FROM quarterly_sales
PIVOT(sum(amount) FOR quarter IN (
'2023_Q1',
'2023_Q2',
'2023_Q3',
'2023_Q4'))
ORDER BY empid;
+-------+-------+-------+-------+-------+
| EMPID | Q1 | Q2 | Q3 | Q4 |
|-------+-------+-------+-------+-------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | NULL | NULL | 2700 | 28900 |
+-------+-------+-------+-------+-------+
Pivot mit einem Standardwert für NULL–Werte¶
Wenn die Abfrage NULL-Werte zurückgibt, können Sie diese durch einen Standardwert ersetzen, indem Sie DEFAULT ON NULL verwenden. Sie können z. B. dynamisches Pivot verwenden und die NULL-Werte durch einen Standardwert von 0
ersetzen, indem Sie die folgende Abfrage ausführen:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount) FOR quarter IN (ANY ORDER BY quarter)
DEFAULT ON NULL (0))
ORDER BY empid;
+-------+-----------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-------+-----------+-----------+-----------+-----------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | 0 | 0 | 2700 | 28900 |
+-------+-----------+-----------+-----------+-----------+
Sie können auch DEFAULT ON NULL mit einer bestimmten Liste von Spalten verwenden:
SELECT *
FROM quarterly_sales
PIVOT(SUM(amount)
FOR quarter IN (
'2023_Q1',
'2023_Q2')
DEFAULT ON NULL (0))
ORDER BY empid;
+-------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' |
|-------+-----------+-----------|
| 1 | 10400 | 8000 |
| 2 | 39500 | 90700 |
| 3 | 0 | 0 |
+-------+-----------+-----------+
Pivot-Beispiele, die mehrere Spalten umfassen¶
Pivot-Abfragen können mit mehreren Spalten arbeiten. Bevor Sie diese Beispiele ausführen, fügen Sie der Tabelle quarterly_sales
eine Spalte hinzu und füllen Sie diese mit Zufallswerten.
Fügen Sie zunächst in der Tabelle quarterly_sales
eine Spalte hinzu, in der der Rabatt für jeden Verkauf erfasst wird:
ALTER TABLE quarterly_sales ADD COLUMN discount_percent INT DEFAULT 0;
Füllen Sie die neue Spalte mit zufälligen Werten zwischen 0
und 5
, die den Rabattprozentsatz für jeden Verkauf angeben:
UPDATE quarterly_sales SET discount_percent = UNIFORM(0, 5, RANDOM());
Fragen Sie die Tabelle ab, um die neue Spalte mit den hinzugefügten Zufallswerten anzuzeigen:
SELECT * FROM quarterly_sales;
+-------+--------+---------+------------------+
| EMPID | AMOUNT | QUARTER | DISCOUNT_PERCENT |
|-------+--------+---------+------------------|
| 1 | 10000 | 2023_Q1 | 0 |
| 1 | 400 | 2023_Q1 | 1 |
| 2 | 4500 | 2023_Q1 | 4 |
| 2 | 35000 | 2023_Q1 | 2 |
| 1 | 5000 | 2023_Q2 | 2 |
| 1 | 3000 | 2023_Q2 | 1 |
| 2 | 200 | 2023_Q2 | 2 |
| 2 | 90500 | 2023_Q2 | 1 |
| 1 | 6000 | 2023_Q3 | 1 |
| 1 | 5000 | 2023_Q3 | 3 |
| 2 | 2500 | 2023_Q3 | 1 |
| 2 | 9500 | 2023_Q3 | 3 |
| 3 | 2700 | 2023_Q3 | 1 |
| 1 | 8000 | 2023_Q4 | 1 |
| 1 | 10000 | 2023_Q4 | 4 |
| 2 | 800 | 2023_Q4 | 3 |
| 2 | 4500 | 2023_Q4 | 5 |
| 3 | 2700 | 2023_Q4 | 3 |
| 3 | 16000 | 2023_Q4 | 0 |
| 3 | 10200 | 2023_Q4 | 1 |
+-------+--------+---------+------------------+
Jetzt, wo die neue Spalte hinzugefügt und ausgefüllt ist, führen Sie die folgenden Beispiele aus:
Spalten mit einer CTE von einer Pivot-Abfrage ausschließen¶
Sie können einen allgemeinen Tabellenausdruck (Common Table Expression, CTE) verwenden, um Spalten von einer Pivot-Abfrage auszuschließen.
Das folgende Beispiel verwendet einen CTE, um die Spalte discount_percent
von einer Pivot-Abfrage auszuschließen:
WITH
sales_without_discount AS
(SELECT * EXCLUDE(discount_percent) FROM quarterly_sales)
SELECT *
FROM sales_without_discount
PIVOT(SUM(amount) FOR quarter IN (ANY ORDER BY quarter))
ORDER BY empid;
+-------+-----------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-------+-----------+-----------+-----------+-----------|
| 1 | 10400 | 8000 | 11000 | 18000 |
| 2 | 39500 | 90700 | 12000 | 5300 |
| 3 | NULL | NULL | 2700 | 28900 |
+-------+-----------+-----------+-----------+-----------+
Sie können einen CTE verwenden, um die Spalte amount
auszuschließen und den durchschnittlichen Rabatt anzuzeigen, den jeder Mitarbeiter in jedem Quartal gewährt hat:
WITH
sales_without_amount AS
(SELECT * EXCLUDE(amount) FROM quarterly_sales)
SELECT *
FROM sales_without_amount
PIVOT(AVG(discount_percent) FOR quarter IN (ANY ORDER BY quarter))
ORDER BY empid;
+-------+-----------+-----------+-----------+-----------+
| EMPID | '2023_Q1' | '2023_Q2' | '2023_Q3' | '2023_Q4' |
|-------+-----------+-----------+-----------+-----------|
| 1 | 0.500000 | 1.500000 | 2.000000 | 2.500000 |
| 2 | 3.000000 | 1.500000 | 2.000000 | 4.000000 |
| 3 | NULL | NULL | 1.000000 | 1.333333 |
+-------+-----------+-----------+-----------+-----------+
Ausführen einer multidimensionalen Pivot-Abfrage¶
Eine multidimensionale Pivot-Abfrage pivotiert auf mehr als einer Spalte. Dieses Beispiel pivotiert auf den Spalten amount
und discount_percentage
. Die Abfrage gibt die Summe aller Verkäufe aller Mitarbeiter pro Quartal und den maximalen Rabattprozentsatz für alle Verkäufe pro Quartal zurück.
In der Abfrage verwendet die SELECT-Liste die Parameter $col_position
, um die Funktionen SUM und MAX der Reihe nach auf die zurückgegebenen Spalten anzuwenden und um die zurückgegebenen Spalten zu benennen. Eine Unterabfrage in der FROM-Klausel liefert die Daten für die Pivot-Operationen. Da die Ausgabe die Verkaufsergebnisse für alle Mitarbeiter zeigt, enthält die Unterabfrage nicht die Spalte empid
.
SELECT SUM($1) AS q1_sales_total,
SUM($2) AS q2_sales_total,
SUM($3) AS q3_sales_total,
SUM($4) AS q4_sales_total,
MAX($5) AS q1_maximum_discount,
MAX($6) AS q2_maximum_discount,
MAX($7) AS q3_maximum_discount,
MAX($8) AS q4_maximum_discount
FROM
(SELECT amount,
quarter AS quarter_amount,
quarter AS quarter_discount,
discount_percent
FROM quarterly_sales)
PIVOT (
SUM(amount)
FOR quarter_amount IN (
'2023_Q1',
'2023_Q2',
'2023_Q3',
'2023_Q4'))
PIVOT (
MAX(discount_percent)
FOR quarter_discount IN (
'2023_Q1',
'2023_Q2',
'2023_Q3',
'2023_Q4'));
+----------------+----------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+
| Q1_SALES_TOTAL | Q2_SALES_TOTAL | Q3_SALES_TOTAL | Q4_SALES_TOTAL | Q1_MAXIMUM_DISCOUNT | Q2_MAXIMUM_DISCOUNT | Q3_MAXIMUM_DISCOUNT | Q4_MAXIMUM_DISCOUNT |
|----------------+----------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------|
| 49900 | 98700 | 25700 | 52200 | 4 | 2 | 3 | 5 |
+----------------+----------------+----------------+----------------+---------------------+---------------------+---------------------+---------------------+