MAX (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(2 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 46: Regel 46:
 
Nu wordt er namelijk slechts geaggregeerd over het huidige record - weinig zinvol.
 
Nu wordt er namelijk slechts geaggregeerd over het huidige record - weinig zinvol.
  
 +
== Waarde opslaan in een variabele ==
 +
 +
''So far-so good:''
 +
 +
<pre>
 +
select max(length(tools_05_de)) from tools_tmp;
 +
 +
> 2867
 +
</pre>
 +
 +
En dit werkt ook - gewoon in een script:
 +
 +
<pre>
 +
set @i=5;
 +
select @i;
 +
</pre>
 +
 +
Om de (scalaire) uitkomst van een query op te slaan in een variabele, moet je het select-statement ''binnen haakjes'' plaatsen:
 +
 +
<pre>
 +
set @i = (select max(length(tools_tmp.tools_05_de)) from tools_tmp);
 +
</pre>
 +
 +
== Zie ook ==
 +
 +
* [[Greatest (MySQL)]] - Om twee scalairs met elkaar te vergelijken
  
 
== Bronnen ==
 
== Bronnen ==
  
 
* https://dev.mysql.com/doc/refman/5.0/en/example-maximum-column.html
 
* https://dev.mysql.com/doc/refman/5.0/en/example-maximum-column.html

Huidige versie van 27 mei 2019 om 08:14

max is een aggregerende functie, die de maximale waarde van een kolom. Bv.:

select max(length(tools_tmp.tools_05_de)) from tools_tmp;

> 2867

Het resultaat is altijd een scalar. Als je zo'n regel toevoegt aan een select-statement, houd je nog maar één rij over vanwege aggregatie:

select

   sku,
   length(tools_01_de),
   length(tools_02_de),
   length(tools_03_de),
   max(length(tools_03_de))

from tools_tmp;

> 12 13 14 14

Maar dit werkt ook niet:

select

   sku,
   length(tools_01_de),
   length(tools_02_de),
   length(tools_03_de),
   (
      select max(length(tools_03_de))
      from tools_tmp
   ) as max_length

from tools_tmp;

>  1  2  3  3
>  5  6  7  7
> 12 13 14 14

Nu wordt er namelijk slechts geaggregeerd over het huidige record - weinig zinvol.

Waarde opslaan in een variabele

So far-so good:

select max(length(tools_05_de)) from tools_tmp;

> 2867

En dit werkt ook - gewoon in een script:

set @i=5;
select @i;

Om de (scalaire) uitkomst van een query op te slaan in een variabele, moet je het select-statement binnen haakjes plaatsen:

set @i = (select max(length(tools_tmp.tools_05_de)) from tools_tmp);

Zie ook

Bronnen