sql >> Databasteknik >  >> RDS >> Sqlserver

SQL GROUP BY CASE-sats med aggregatfunktion

Min gissning är att du egentligen inte vill GROUP BY någon_produkt.

svaret till: "Finns det något sätt att GROUP BY ett kolumnalias som some_product i det här fallet, eller måste jag lägga detta i en underfråga och grupp på det?" är: Du kan inte GROUP BY ett kolumnalias.

SELECT sats, där kolumnalias tilldelas, bearbetas inte förrän efter GROUP BY klausul. En inline-vy eller gemensamt tabelluttryck (CTE) kan användas för att göra resultaten tillgängliga för gruppering.

Inbäddad vy:

select ...
from (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... ) T
group by some_product ...

CTE:

with T as (select ... , CASE WHEN col1 > col2 THEN SUM(col3*col4) ELSE 0 END AS some_product
   from ...
   group by col1, col2 ... )
select ...
from T
group by some_product ... 


  1. GROUP_CONCAT() Funktion i MySQL

  2. Hur MONTHNAME() fungerar i MariaDB

  3. Blir de snabbare om du lägger till 'LIMIT 1' i MySQL-frågor när du vet att det bara kommer att bli ett resultat?

  4. Hur kan du se om ett PL/SQL-paket, en procedur eller en funktion används?