Aggregatie (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(4 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 17: Regel 17:
 
* Voorbeeld: [[Ontdubbelen (MySQL)]]
 
* Voorbeeld: [[Ontdubbelen (MySQL)]]
  
== Casus: Alle kolommen gelijk? (feb. 2021) ==
+
== Casus: Aggregeer indien gelijk of null (feb. 2021) ==
  
In een tabel moet kolom ''sku'' alleen worden ingevuld, als de waarde in de kolommen ''ca_sku'', ''cm_sku'', etc. identiek is. Hoe kan dat op een handige manier?
+
In een tabel moet kolom ''sku'' alleen worden ingevuld, als de waarde in de kolommen ''ca_sku'', ''cm_sku'', etc. identiek is. Hoe kan dat op een handige manier?  
 +
 
 +
Uiteindelijk ben ik met een iteratieve oplossing gekozen:
 +
 
 +
* Deze is verbazend snel (kost een paar seconde op een tabel met 67.000 records)
 +
* Code is gemakkelijk te begrijpen
 +
* Gemakkelijk uit te breiden
 +
* Merk op dat de kolom de waarde "-1" krijgt, als er ''geen'' geaggregeerde waarde beschikbaar is, en <code>Null</code> als er geen waarde beschikbaar is.
 +
 
 +
<pre>
 +
################################################################################
 +
# Aggregate EAN
 +
################################################################################
 +
#
 +
# ca_ean
 +
########################################
 +
#
 +
update asin set ean = ca_ean;
 +
 
 +
 
 +
# cm_ean
 +
########################################
 +
#
 +
update asin set ean = cm_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and cm_ean is not null and ean<>cm_ean;
 +
 
 +
 
 +
# de_ean
 +
########################################
 +
#
 +
update asin set ean = de_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and de_ean is not null and ean<>de_ean;
 +
 
 +
 
 +
# es_ean
 +
########################################
 +
#
 +
update asin set ean = es_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and es_ean is not null and ean<>es_ean;
 +
 
 +
 
 +
# fr_ean
 +
########################################
 +
#
 +
update asin set ean = fr_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and es_ean is not null and ean<>fr_ean;
 +
 
 +
 
 +
# it_ean
 +
########################################
 +
#
 +
update asin set ean = it_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and it_ean is not null and ean<>it_ean;
 +
 
 +
 
 +
# mx_ean
 +
########################################
 +
#
 +
update asin set ean = mx_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and mx_ean is not null and ean<>mx_ean;
 +
 
 +
 
 +
# nl_ean
 +
########################################
 +
#
 +
update asin set ean = nl_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and nl_ean is not null and ean<>nl_ean;
 +
 
 +
 
 +
# uk_ean
 +
########################################
 +
#
 +
update asin set ean = uk_ean where ean is null;
 +
update asin set ean = "-1" where ean is not null and uk_ean is not null and ean<>uk_ean;
 +
 
 +
 
 +
# Check
 +
########################################
 +
#
 +
select ean, ca_ean, cm_ean, de_ean, es_ean, fr_ean, it_ean, mx_ean, nl_ean, uk_ean from asin;
 +
</pre>
  
 
== Zoektermen ==
 
== Zoektermen ==

Huidige versie van 4 feb 2021 om 17:47

Aggregatie lijkt twee dingen te kunnen beteken:

  • Samenvoegen van identieke informatie
  • Afleiden (derive) van nieuwe informatie van een verzameling gegevens.

Aggregated functions - Afleiden

Met aggregated functions wordt rondom MySQL meestal deze tweede betekenis te worden bedoeld. Denk aan functies zoals

  • count()
  • max()
  • min()
  • sum().

Samenvoegen

Casus: Aggregeer indien gelijk of null (feb. 2021)

In een tabel moet kolom sku alleen worden ingevuld, als de waarde in de kolommen ca_sku, cm_sku, etc. identiek is. Hoe kan dat op een handige manier?

Uiteindelijk ben ik met een iteratieve oplossing gekozen:

  • Deze is verbazend snel (kost een paar seconde op een tabel met 67.000 records)
  • Code is gemakkelijk te begrijpen
  • Gemakkelijk uit te breiden
  • Merk op dat de kolom de waarde "-1" krijgt, als er geen geaggregeerde waarde beschikbaar is, en Null als er geen waarde beschikbaar is.
################################################################################
# Aggregate EAN
################################################################################
#
# ca_ean
########################################
#
update asin set ean = ca_ean;


# cm_ean
########################################
#
update asin set ean = cm_ean 	where ean is null;
update asin set ean = "-1" 	where ean is not null and cm_ean is not null and ean<>cm_ean;


# de_ean
########################################
#
update asin set ean = de_ean	where ean is null;
update asin set ean = "-1" 	where ean is not null and de_ean is not null and ean<>de_ean;


# es_ean
########################################
#
update asin set ean = es_ean 	where ean is null;
update asin set ean = "-1" 	where ean is not null and es_ean is not null and ean<>es_ean;


# fr_ean
########################################
#
update asin set ean = fr_ean	where ean is null;
update asin set ean = "-1"	where ean is not null and es_ean is not null and ean<>fr_ean;


# it_ean
########################################
#
update asin set ean = it_ean	where ean is null;
update asin set ean = "-1" 	where ean is not null and it_ean is not null and ean<>it_ean;


# mx_ean
########################################
#
update asin set ean = mx_ean	where ean is null;
update asin set ean = "-1"	where ean is not null and mx_ean is not null and ean<>mx_ean;


# nl_ean
########################################
#
update asin set ean = nl_ean	where ean is null;
update asin set ean = "-1" 	where ean is not null and nl_ean is not null and ean<>nl_ean;


# uk_ean
########################################
#
update asin set ean = uk_ean	where ean is null;
update asin set ean = "-1" 	where ean is not null and uk_ean is not null and ean<>uk_ean;


# Check
########################################
#
select ean, ca_ean, cm_ean, de_ean, es_ean, fr_ean, it_ean, mx_ean, nl_ean, uk_ean from asin;

Zoektermen

  • Aggregated functions
  • Aggregatie
  • Aggregatie MySQL
  • Aggregation

Zie ook

Bronnen