powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как собрать результирующую выборку?
4 сообщений из 4, страница 1 из 1
Как собрать результирующую выборку?
    #39769831
seometis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица c лидами:
id ad_id year month day status payout1 123 2019 21 approved 5002 123 2019 21 declined 03 123 2019 21 wait 04 123 2019 21 approved 5005 123 2019 21 declined 06 222 2019 21 approved 5007 222 2019 21 declined 08 222 2019 21 declined 09 222 2019 21 approved 500

Из которой нужно сделать сводную:
ad_id year month day approved declined wait payout123 2019 21 2 2 1 1000222 2019 21 2 2 01000

Можно ли такое сделать за 1 запрос?
...
Рейтинг: 0 / 0
Как собрать результирующую выборку?
    #39769897
MikkiMouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seometis,

Не знаю, хто такие лиды, но запрос тут простой.
Следи за руками:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
mysql> CREATE TABLE chepuxa (
    ->     id INT AUTO_INCREMENT,
    ->     ad_id INT,
    ->     year INT,
    ->     month INT,
    ->     day INT,
    ->     status VARCHAR(10),
    ->     payout INT,
    ->     PRIMARY KEY (id)
    -> ) ENGINE=INNODB;
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO chepuxa (ad_id, year, month, day, status, payout)
    -> VALUES 
    ->     (123, 2019, 2, 1, 'approved', 500),
    ->     (123, 2019, 2, 1, 'declined', 0),
    ->     (123, 2019, 2, 1, 'wait', 0),
    ->     (123, 2019, 2, 1, 'approved', 500),
    ->     (123, 2019, 2, 1, 'declined', 0),
    ->     (222, 2019, 2, 1, 'approved', 500),
    ->     (222, 2019, 2, 1, 'declined', 0),
    ->     (222, 2019, 2, 1, 'declined', 0),
    ->     (222, 2019, 2, 1, 'approved', 500);
Query OK, 9 rows affected (0.11 sec)
Records: 9  Duplicates: 0  Warnings: 0

mysql> SELECT 
    ->     ad_id,
    ->     year,
    ->     month,
    ->     day,
    ->     SUM(IF(status='approved', 1, 0)) AS approved,
    ->     SUM(IF(status='declined', 1, 0)) AS declined,
    ->     SUM(IF(status='wait', 1, 0))     AS wait,
    ->     SUM(payout)                      AS payout
    -> FROM chepuxa
    -> GROUP BY ad_id, year, month, day;
+-------+------+-------+------+----------+----------+------+--------+
| ad_id | year | month | day  | approved | declined | wait | payout |
+-------+------+-------+------+----------+----------+------+--------+
|   123 | 2019 |     2 |    1 |        2 |        2 |    1 |   1000 |
|   222 | 2019 |     2 |    1 |        2 |        2 |    0 |   1000 |
+-------+------+-------+------+----------+----------+------+--------+
2 rows in set (0.01 sec)
...
Рейтинг: 0 / 0
Как собрать результирующую выборку?
    #39769898
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MikkiMouse
Код: sql
1.
SUM(IF(status='approved', 1, 0))

Можно сократить:
Код: sql
1.
SUM(status='approved')
...
Рейтинг: 0 / 0
Как собрать результирующую выборку?
    #39769913
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
seometisМожно ли такое сделать за 1 запрос?Обычный PIVOT. Если список всех возможных статусов фиксирован и не изменится в будущем - показанный выше запрос, пожалуй, оптимален. Иначе нужно использовать ХП с динамическим SQL. См. напр. PIVOT средствами MySQL .
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как собрать результирующую выборку?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]