SQL Workshop - Selecting columns without a non-aggregate column

Result Set 3

Material_id

Year

Value

TX002

1/1/2013

360ドル

TX003

1/1/2013

680ドル.01

and exporting material_id and year to the outside scope, both of which will subsequently used for joining with the Accounts table of the outer query ( a.material_id = b.material_id and a.year = b.year), producing :

Result Set 4

Account_category

Account_id

Value

01

220201511

360ドル

01

220201511

680ドル.01

and finally grouped into :

Result Set 5

Account_category

Account_id

Summed_amount

01

220201511

1040ドル.01


enabling us to answer questions like "how much money on average, did the consumption of fruit cost us this year?", so that we can estimate how much money we should reserve for next year’s purchases.

Other SQL Workshops

SQL Workshop - Selecting columns without including a
non-aggregate column in the group by clause

SQL Workshop - Subselects And Join

More SQL Workshop soon!


DORA Report Reveals Widespread Reliance On AI
30/09/2025

90% of professional developers now use AI at work, up 14% from 2024, spending a median of two hours per day working with AI tools. Nearly two-thirds rely on AI for at least half their workflow, and fo [ ... ]



.NET Aspire 9.5 Improves Dashboard
30/09/2025

.NET Aspire 9.5 has been released with a number of improvements to the dashboard. It also adds targeted CLI and tooling updates, channel-aware templating, and a preview of infrastructure for .NET [ ... ]



<< Prev - Next

Written by Nikos Vaggalis
Thursday, 19 December 2013
Article Index
SQL Workshop - Selecting columns without a non-aggregate column
The Solution
Page 2 of 2

That’s happening because column m.unit is used in the SELECT clause but not in the GROUP BY clause.

This is a perfectly valid and reasonable response from our DBMS, but in this exceptional case, selecting columns without including a non-aggregate column in the group by clause would be handy.

But this can’t happen if we are not explicit in what we ask for :

SELECT
a.account_category,
a.account_id,
sum (b.value) as summed_amount
FROM (
SELECT m.material_id, m.year
CASE

WHEN m.unit = 'PIECES'
THEN m.mean_value * r.quantity * m.ratio

ELSE m.mean_value * r.quantity / m.ratio
END as value
from materials m, requests r
where r.year = '1/1/13' and
r.year = m.year and
r.material_id = m.material_id) b,
accounts a
WHERE
a.material_id = b.material_id and
a.year = b.year
GROUP BY account_category, account_id

This works because of an inline view (marked in red) which acts as a temporary table holding the value for each row :

Last Updated ( Thursday, 06 September 2018 )