php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 09-08-2011, 01:12
simond
 Registrierter Benutzer
Links : Onlinestatus : simond ist offline
Registriert seit: Feb 2006
Beiträge: 34
simond ist zur Zeit noch ein unbeschriebenes Blatt
Standard Bestimmte Werte innerhalb einer Gruppe addieren

Hallo,

ich benötige mal wieder einen Denkanstoß:
Code:
Tabelle:

id|rechnungsnr|einzelpreis|d|
1|100|10|1
2|100|20|0
3|100|5|1
4|101|20|0
5|102|10|1
6|102|7|1
Für jede Rechnung möchte ich die Summe der Preise erhalten, die in Spalte d den Wert 1 haben. Im Beispiel wäre dann folgendes Ergebnis gewünscht:

Code:
rechnungsnr|summe
100|15
101|0
102|17
Mit Zitat antworten
  #2 (permalink)  
Alt 09-08-2011, 02:33
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

nutze in den Spaltenreferenzen die sum-Funktion und gruppiere (GROUP BY) das Ergebnis nach der Rechnungsnummer.

Gruß,

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #3 (permalink)  
Alt 09-08-2011, 12:55
simond
 Registrierter Benutzer
Links : Onlinestatus : simond ist offline
Registriert seit: Feb 2006
Beiträge: 34
simond ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Bei folgender Abfrage gehen aber die Rechnungsnummern verloren, die keinen Wert 1 in der Spalte d haben, das ist mein Problem.
Code:
Select rechnungsnr, sum(einzelpreis) from tabelle where d = 1 group by rechnungsnr
Mit Zitat antworten
  #4 (permalink)  
Alt 09-08-2011, 13:06
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von simond Beitrag anzeigen
Bei folgender Abfrage gehen aber die Rechnungsnummern verloren, die keinen Wert 1 in der Spalte d haben, das ist mein Problem.
Völlig korrekt, dafür hast du ja mit der Where-Klausel gesorgt. Wenn du das nicht willst, nimm halt die Where-Klausel weg. Ist das nicht eigentlich offensichtlich?
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #5 (permalink)  
Alt 09-08-2011, 13:20
simond
 Registrierter Benutzer
Links : Onlinestatus : simond ist offline
Registriert seit: Feb 2006
Beiträge: 34
simond ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So erhalte ich aber nicht die gewünschte Lösung. Vielleicht habe ich mich unklar ausgedrückt. Es soll jede Rechnungsnr einmal ausgegeben werden. Dazu soll eine Spalte geben, die die Summe der Preise der einzelnen Rechnungsnr beinhaltet, die in der Spalte d den Wert 1 haben (siehe Muster Ergebnis).
Mit Zitat antworten
  #6 (permalink)  
Alt 09-08-2011, 13:30
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Google-Stichwort:

MySQL Conditional SUM

Hat genau 10 Sekunden gedauert. Versteh nicht warum du nicht erst googlest?
__________________
This is what happens when an unstoppable force meets an immovable object.
Mit Zitat antworten
  #7 (permalink)  
Alt 09-08-2011, 13:31
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Wenn d nur 0 oder 1 sein kann, kannst du mit max(d) die Rechnungsnummern finden, die mindestens einmal mit d=1 auftauchen und die per HAVING auswählen:

Code:
SELECT
    rechnungsnr,
    sum(einzelpreis),
    max(d) as flag
FROM tabelle
GROUP BY rechnungsnr
HAVING flag = 1
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #8 (permalink)  
Alt 09-08-2011, 13:32
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Wenn d nur 0 oder 1 sein kann, kannst du mit max(d) die Rechnungsnummern finden, die mindestens einmal mit d=1 auftauchen und die per HAVING auswählen.
Auch da fehlt Rechnungsnr. 101. Er will auf jeden Fall ALLE Rechnungsnr. haben - aber addiert werden soll nur dann, wenn d = 1 des einzelnen Eintrags ist. D.h. 101 muss auch im Ergebnis sein, und zwar mit 0.
__________________
This is what happens when an unstoppable force meets an immovable object.
Mit Zitat antworten
  #9 (permalink)  
Alt 09-08-2011, 13:38
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Achso, stimmt, dann eben
Code:
max(d) * sum(einzelpreis)
und ohne having.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #10 (permalink)  
Alt 09-08-2011, 13:59
Benutzerbild von ApoY2k ApoY2k
 Registrierter Benutzer
Links : Onlinestatus : ApoY2k ist offline
Registriert seit: Nov 2006
Beiträge: 359
ApoY2k befindet sich auf einem aufstrebenden Ast
ApoY2k eine Nachricht über ICQ schicken ApoY2k eine Nachricht über Skype™ schicken
Standard

Stimmt auch nicht, das Ergebnis für 100 soll 15 sein und nicht 35. Du addierst die eine Spalte von 100, bei der d = 0 ist, immernoch mit. Kann ja garnicht funktionieren^^

Das geht echt nur mit Conditional SUM wies aussieht.
__________________
This is what happens when an unstoppable force meets an immovable object.

Geändert von ApoY2k (09-08-2011 um 14:01 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 10-08-2011, 02:10
simond
 Registrierter Benutzer
Links : Onlinestatus : simond ist offline
Registriert seit: Feb 2006
Beiträge: 34
simond ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von ApoY2k Beitrag anzeigen
Das geht echt nur mit Conditional SUM wies aussieht.
Das war der entscheidende Hinweis, vielen Dank! Hier die Lösung:
Code:
select rechnungsnr, sum(if (d =1,einzelpreis,0)) from tabelle group by rechnungsnr
Mit Zitat antworten
  #12 (permalink)  
Alt 10-08-2011, 06:53
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Hätte nicht SUM(d * einzelpreis) auch funktioniert?
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Alle Werte einer Spalte addieren ollimagic SQL / Datenbanken 2 15-02-2008 13:32
werte aus db, aus verschiedenen zeilen durch select zu einer ges. summe addieren hdmnf PHP Developer Forum 21 08-03-2007 18:03
Wie drei Felder in einer Zeile auf bestimmte Werte prüfen? Beaker SQL / Datenbanken 3 09-08-2004 11:08
Namesfindung einer Gruppe Spielgrips Off-Topic Diskussionen 4 12-06-2003 17:12
Werte einer Spalte addieren Php Doofkopp SQL / Datenbanken 5 26-04-2003 16:07

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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 an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 04:16 Uhr.