SQL NOT GROUP BY - PullRequest
       7

SQL NOT GROUP BY

0 голосов
/ 16 ноября 2018

Столбцы таблицы:

ID | KEY_CODE | CONFIRMS | TYPE | ID_TX | AMOUNT | ADDR | TIMESTAMP

Ответ без моей помощи:

'1', '38ajZshxdf', '6', 'i', 'jZshxdyAyzXucVYe', 
'0.00763766','3126ad1ec17eb114', '1541991745'

Мой запрос:

SELECT
    id AS id,
    CASE 
        WHEN confirms >= 3 THEN 1
        ELSE 0
    END AS status,
    address,
    monto
FROM
    txs
WHERE
    address IN ('38ajZshxdfrfEGfyAyzXucVY6YXRQSWaGe', 
                '18jkwUXwDYGXz9raoRdmGWjJFYQV3uu17Y',  
                '12p5H7QK6Jgtsy27pMNkdgTPjhtt6sN6bM')
GROUP BY 
    address, status

Мне нужны группы строк по статусу (если подтвердите> 3, затем 1 или 0), SQL-запрос должен возвращать ВСЕГО суммы по 1 и 0 и конкретные адреса (ADDR).

Например:

ADDR, HAVE(0.00000000), STATUS (1 | 0)

1 Ответ

0 голосов
/ 16 ноября 2018

Вы действительно не правы. snytax не имеет особого смысла ..

SELECT
    *,
    txs.id AS id,
    CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0
    END AS status,
    address,
    FORMAT(SUM(monto) ,8) AS balance,
    tx,
    fecha
FROM
    txs
WHERE
    txs.address IN ([SOME_LIST])

GROUP BY MIN(status)
ORDER BY status ASC

Вы используете *, и вы делаете Aggregate .. Это, очевидно, ошибка Clear .. Потому что все столбецВы вызываете должны ввести Group by и Ваш Group by с Min() .. Это также может привести к ошибке ..

агрегатные функции не разрешены в GROUP BY

Так что просто возьмите столбец, что вам нужно.

SELECT
    txs.id AS id,
    CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0
    END AS status,
    address,
    FORMAT(SUM(monto) ,8) AS balance,
    tx,
    fecha
FROM
    txs
WHERE
    txs.address IN ([SOME_LIST])
GROUP BY 
    id, 
    (CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0
    END), 
    address, tx, fecha
ORDER BY 
     (CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0
      END) ASC

РЕДАКТИРОВАТЬ :

Поскольку ваш status является столбцом условия .. Вместо этого поместите полное выражение ..

CASE 
  WHEN txs.confirms >= 3 THEN 1
  ELSE 0
END AS status

Это ваш столбец Status. Поскольку это столбец условий. Вы не можете группировать по одному уровню. Поэтому поместите свое полное выражение в условие group by.И, как вы можете видеть ... Я поместил это выражение в Group By и Order By полное выражение вашего status условия столбца ..

GROUP BY 
    id, 
    (CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0
    END), -----> This are Status Condition
    address, tx, fecha
ORDER BY 
     (CASE 
        WHEN txs.confirms >= 3 THEN 1
        ELSE 0 
      END) ASC -----------> and this too..
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...