Höchsten Wert aus einem Feld mit mehreren Zahlen ermitteln (MySQL)

dinoldo

Cadet 4th Year
Registriert
Juni 2017
Beiträge
104
Hallo Leute,

mit diesem SQL-Befehl bekomme ich eine Zusammenfassung von bestimmten Element. Soweit erstmal in Ordnung.
SELECT p_elements.nominal_widths, COUNT(*) FROM p_elements
WHERE p_elements.element_name = 'TSTK'
GROUP BY nominal_widths ORDER BY 2 DESC

1696676292830.png


Leider stehen bei "element_name" = TSTK im Feld "nominal_widths" mehrere Zahlen die durch / getrennt sind.

Was muss ich bitte im SQL-Befehl ändern, damit nach höchstem Wert das Zusammenzählen erfolgt.
Bsp. 125 / 125 / 100 ==> 125
Bsp. 250 / 200 / 300 ==> 300

Besten Dank im Voraus für die Unterstützung.

Gruß Dino
 
Nicht gut, dass das nicht normalisiert ist.

substring_index und greates werden dir dabei helfen.
Code:
select GREATEST(
TRIM(SUBSTRING_INDEX(a,'/',1)),
TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(a,'/',2),'/',-1)),
TRIM(SUBSTRING_INDEX(a,'/',-1))
)
FROM (SELECT nomial_widths AS a FROM p_elements)

Natürlich ungetestet.
 
Zuletzt bearbeitet: (Mittlerer Wert muss zuerst die ersten 2 und dann das hintere Element picken.)
Hi Hancock,

zunächst vielen Dank für deine Antwort.

Ich bekomme diese Meldung:
1696677706571.png
 
Das sollte so 1:1 bei Dir laufen.
Code:
SELECT pe.nominal_widths, GREATEST(SUBSTRING_INDEX(pe.nominal_widths, ' / ',1), SUBSTRING_INDEX(SUBSTRING_INDEX(pe.nominal_widths, ' / ',2), ' / ',-1), SUBSTRING_INDEX(pe.nominal_widths, ' / ',-1)) as max_width, COUNT(*)
FROM p_elements as pe
WHERE pe.element_name = 'TSTK'
GROUP BY 1, 2
ORDER BY 3 DESC;
 
  • Gefällt mir
Reaktionen: dinoldo
Vielen herzlichen Dank an alle. Es sieht besser aus.
Hier im Beispiel ist 65 größer als 100 oder 125.
Muss das Ergebnis doch als Zahl und nicht als Text verglichen werden?

1696687697064.png
 
Zuletzt bearbeitet:
So z.B.:
Code:
SELECT pe.nominal_widths, GREATEST(CONVERT(SUBSTRING_INDEX(pe.nominal_widths, ' / ',1), SIGNED), CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(pe.nominal_widths, ' / ',2), ' / ',-1), SIGNED), CONVERT(SUBSTRING_INDEX(pe.nominal_widths, ' / ',-1),SIGNED)) as max_width, COUNT(*)
FROM p_elements as pe
WHERE pe.element_name = 'TSTK'
GROUP BY 1, 2
ORDER BY 3 DESC;
 
Es funktioniert. Danke!

SQL:
SELECT pe.nominal_widths, GREATEST(

CAST(SUBSTRING_INDEX(pe.nominal_widths, ' / ',1) AS SIGNED),

CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(pe.nominal_widths, ' / ',2), ' / ',-1) AS SIGNED),

CAST(SUBSTRING_INDEX(pe.nominal_widths, ' / ',-1) AS SIGNED)) as max_width, COUNT(*)

FROM p_elements as pe

WHERE pe.element_name = 'TSTK'

GROUP BY 1, 2

ORDER BY 3 DESC;
 
Zuletzt bearbeitet:
Zurück
Oben