sql >> Databáze >  >> RDS >> Mysql

Jak mohu použít aliasy v klauzuli GROUP BY?

Nejste si jisti, o co se snažíte. Dotaz však můžete zabalit do poddotazu bez parametru range_day v doložce GROUP BY. Poté použijte svou klauzuli GROUP BY ve vnějším dotazu tak, jak je.

SELECT  SUM(score) score,
    type,
    context, -- WARNING! Not listed in group by clause
    post_id,
    table_code,
    comment_id,
    MIN(seen) seen,
    MAX(d_t) d_t,
    range_day
FROM (
    SELECT  SUM(score) score,
        MAX(id) as id,
        type,
        context, -- WARNING! Not listed in group by clause
        post_id,
        e.table_code,
        comment_id,
        MIN(seen) seen,
        MAX(date_time) d_t,
        (CASE   WHEN FROM_UNIXTIME(MAX(date_time)) >= CURDATE() THEN 'today'
            WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY) THEN 'yesterday'
            WHEN FROM_UNIXTIME(MAX(date_time)) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY) THEN 'in last week'
            ELSE 'in last month'
        END) as range_day
    FROM `events` e
    WHERE e.id IN ($ids)
    GROUP BY type, post_id, e.table_code, comment_id
) sub
GROUP BY type, post_id, table_code, comment_id, range_day
ORDER BY seen, MAX(d_t) desc, MAX(id) desc

Nicméně - vyberete context bez agregace, která není uvedena v klauzuli GROUP BY. Ze skupiny tak získáte nějakou „náhodnou“ hodnotu. V přísném režimu dotaz selže.



  1. Předávání pole ints do T-SQL uloženého procesu prostřednictvím entity framework

  2. PHP MySQL - Chyba:Není vybrána žádná databáze

  3. Porovnejte výsledek dvou tabulkových funkcí pomocí jednoho sloupce z každé

  4. Oracle s node-oracle:Chyba při pokusu o načtení textu pro chybu ORA-01804