AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MySQL: DISTINCT bei einem benutzerdefinierten Feld?
Thema durchsuchen
Ansicht
Themen-Optionen

MySQL: DISTINCT bei einem benutzerdefinierten Feld?

Ein Thema von blackdrake · begonnen am 4. Jan 2009 · letzter Beitrag vom 5. Jan 2009
Antwort Antwort
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#1

MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 4. Jan 2009, 01:32
Datenbank: MySQL • Version: 4/5 • Zugriff über: Direkte PMA Abfrage
Hallo.

Folgende Query schneidet einen Teil auf `hardwareid` heraus und listet alle Einträge.

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`
FROM `...`
ORDER BY `teil`
Gewünscht ist zusätzlich eine Filterung, bei der nur Einträge gezeigt werden, bei denen dieses herausgeschnittene Teil öfters als 1 Mal vorkommt.

Nun habe ich folgendes ausprobiert:

1) COUNT(`teil`) AS `vorkommen` (geht nicht)
Gewünscht: WHERE `vorkommen` > 1

2) DISTINCT(`teil`) und GROUP BY `teil`
Gewünscht: WHERE COUNT(DISTINCT(`teil`)) > 1

Beides funktioniert nicht, da `teil` ein benutzerdefiniertes und kein natives Feld ist.

Was kann ich tun?

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 4. Jan 2009, 10:50
Versuch es mal mit einer Derived Table
Markus Kinzler
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

Re: MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 4. Jan 2009, 10:55
Zitat von blackdrake:
Hallo.

Folgende Query schneidet einen Teil auf `hardwareid` heraus und listet alle Einträge.

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`
FROM `...`
ORDER BY `teil`
Gewünscht ist zusätzlich eine Filterung, bei der nur Einträge gezeigt werden, bei denen dieses herausgeschnittene Teil öfters als 1 Mal vorkommt.
Ich habe zwar nur InterBase / FireBird im Einsatz aber so sollte es mit Standard SQL auch in MySQL gehen:

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`
FROM `...`
GROUP BY `teil`, SUBSTRING( `hardwareid` , 33, 32 )
HAVING COUNT(*) > 1
Wenn man die Anzahl je Gruppe sehen möchte:

SQL-Code:
SELECT COUNT(*), `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`
FROM `...`
GROUP BY `teil`, SUBSTRING( `hardwareid` , 33, 32 )
HAVING COUNT(*) > 1
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 4. Jan 2009, 23:08
Hallo.

Vielen Dank, es hat funktioniert!

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`, COUNT(*) AS `vorkommen`
FROM `...`
GROUP BY `teil`, SUBSTRING( `hardwareid` , 33, 32 )
HAVING COUNT(*) > 1
Es ist irgendwie verwirrend, dass man bei einem GROUP BY bei einem "benutzerdefinierten (AS) Feld" sowohl den definierten Namen als auch die Definition schreiben muss, mit Kommas getrennt - wieso eigentlich?

Außerdem verstehe ich nicht, wieso man "HAVING COUNT(*) > 1" anstelle von "WHERE `vorkommen` > 1" schreibt...

Gruß
blackdrake
Daniel Marschall
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 5. Jan 2009, 06:32
HAVING wird Benutzt um Gruppierungen einzuschränken, WHERE für die ganze Ergebnismenge.
Die wenigtsen DBMS unterstützen es definierte Feld-Aliase in WHERE/HAVING zu verwenden
Markus Kinzler
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#6

Re: MySQL: DISTINCT bei einem benutzerdefinierten Feld?

  Alt 5. Jan 2009, 06:48
Zitat von blackdrake:
Hallo.

Vielen Dank, es hat funktioniert!

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`, COUNT(*) AS `vorkommen`
FROM `...`
GROUP BY `teil`, SUBSTRING( `hardwareid` , 33, 32 )
HAVING COUNT(*) > 1
Es ist irgendwie verwirrend, dass man bei einem GROUP BY bei einem "benutzerdefinierten (AS) Feld" sowohl den definierten Namen als auch die Definition schreiben muss, mit Kommas getrennt - wieso eigentlich?
Eigentlich nicht - so sollte es eigenlich heissen:

SQL-Code:
SELECT `used_by` , SUBSTRING( `hardwareid` , 33, 32 ) AS `teil`, COUNT(*) AS `vorkommen`
FROM `...`
GROUP BY `used_by`, SUBSTRING( `hardwareid` , 33, 32 )
HAVING COUNT(*) > 1
Sorry für den Tippfehler
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz