A timesheet analyst is calculating billable hours for a contractor engagement. The contractor worked 9 days at 8 hours per day.
Write a query to return the total hours in a single column named hours_worked. The AS keyword is optional — 9 * 8 hours_worked works the same as 9 * 8 AS hours_worked.
Output:
- A single row with one column named
hours_worked, containing the total.
Run previews · Check grades
Write a query, then run it to see results here.
Worked solution Try it yourself first
SELECT
9 * 8 hours_worked The shape
The identifier sitting right after the multiplication is the alias, even with no AS keyword between them. PostgreSQL treats a bare identifier following an expression in the SELECT list as the column name for that expression.
Clause by clause
SELECT 9 * 8 hours_workedevaluates the multiplication and labels the result.9 * 8returns72, andhours_workedbecomes the column header. There's noFROMbecause the day count and the daily hours come straight from the prompt as integer literals.- The whitespace between
8andhours_workedis what tells PostgreSQL the identifier is an alias and not part of the arithmetic. There's no operator that could join an integer to an identifier, so the parser reads the identifier as the optional alias position.
Why this and not 9 * 8 AS hours_worked
Both return the same row with the same column header. The AS keyword is optional in PostgreSQL's grammar; the alias position exists with or without it. The shorter form saves one word, and it shows up in older codebases and in code from analysts who learned SQL on a dialect where AS was less emphasised.
The longer form is clearer. With AS written out, the alias is unmistakable. Without it, a scan of SELECT 9 * 8 hours_worked can read for a half-second like there's a missing operator before the identifier. Writing AS is the safer habit; recognising the form without it is the skill that lets you read other people's code.
You practiced aliasing a column with the AS keyword omitted. PostgreSQL accepts expression alias_name as shorthand for expression AS alias_name — useful to recognise in legacy code, though writing AS explicitly is clearer.