Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę używać aliasów w klauzuli GROUP BY?

Nie wiem, co próbujesz zrobić. Ale możesz umieścić zapytanie w podzapytanie bez range_day w klauzuli GROUP BY. Następnie użyj klauzuli GROUP BY w zewnętrznym zapytaniu bez zmian.

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

Jednak - wybierasz context bez agregacji, która nie jest wymieniona w klauzuli GROUP BY. W ten sposób otrzymasz pewną „losową” wartość z grupy. W trybie ścisłym zapytanie zakończy się niepowodzeniem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikaj powtarzania rekordów wyświetlanych w MySQL / PHP

  2. Mysql:wykonanie polecenia odrzuconego użytkownikowi ''@'localhost' z powodu rutynowego błędu

  3. Jak przeformułować zapytanie sql

  4. Tabela czyszczenia MySQL ze zduplikowanych wpisów ORAZ ponownie połącz FK w tabeli zależnej

  5. Limit rozmiaru importu pliku w PHPMyAdmin