SQL-Variable: Werte auslesen und addieren

Werner S

Mitglied
Guten morgen,

ich brauche mal wieder eure Hilfe da ich nicht mal einen Ansatz habe wie ich das Lösen könnte.

Erst mal SQL
PHP:
$table->increments('id');
            $table->unsignedBigInteger('invoice_id')->nullable();
            $table->float('quantity')->nullable(); // Anzahl
            $table->string('unit')->nullable(); // x, Stück, Monat, Stunde
            $table->text('pos_txt')->nullable();
            $table->decimal('price', 22, 14)->default(0); // Brutto Preis
            $table->decimal('eprice', 22, 14)->default(0);
            $table->float('tax')->nullable(); // Steuersatz

Das auslesen ist soweit kein Problem.

Gehen wir davon aus ich habe mehrere Einträge mit einem Steuersatz von 19% und einige von 7%.
Jetzt möchte ich gerne alle Steuersetze mit 19% abfragen und alle mit 7% separat abfragen.

Soweit kein Problem
PHP:
$data = DB::table('positions')->where('tax', '19.00')->get();
$data2 = DB::table('positions')->where('tax', '07.00')->get();

Wie gehe ich allerdings vor wenn der Steuersatz mal 16% ist oder auch mal 2?
Ich würde also gerne alle unterschiedlichen (variablen) Werte aus der Spalte 'tax' ermitteln um anschließend alle Werte aus price mit dem gleichen Satz addieren.

Ich hoffe ich habe das jetzt verständlich geschrieben, ansonsten bitte Nachfragen.
 
Zuletzt bearbeitet:
Kannst ja mal schauen, ob soetwas wie groupBy('tax') möglich ist. In SQL-Abfragen kannst du ja auch Werte summieren und gruppieren.
 
Was hast du denn ausprobiert?

Kurz in SQLite getestet und das hier geht:
SQL:
SELECT SUM(`price`), `tax` FROM `positions` GROUP BY `tax`;

/*
Daten:
1    1.0        Stück        Banane            10.5    10.5    7
2    5.0        Stück        Apfel            17.5    3.5        7
3    10.0    Packungen    Klammer            20.0    2.0        19
4    5.0        Stunden        Schwarzarbeit    300.0    60.0    0
5    3.0        Stück        Zeitung            7.5        2.5        16

Ergebnis:
300.0    0
28.0    7
7.5        16
20.0    19
*/

Wenn es in SQLite geht, dann wird es sicher auch in Eloquent-Notation gehen. Notfalls rohe Abfragen. Also ich gehe mal davon aus, dass das Eloquent ist, was du da gepostet hast.
 
So ist es.
Ich hatte folgendes

PHP:
$orders = DB::table('invoicepositions')
    ->select('tax', DB::raw('SUM(price) as total_sales'))
    ->groupBy('tax')
    ->get();

dd($orders);

welches immer zu einem Fehler führte.

Mit

PHP:
$orders = DB::table('invoicepositions')
            ->select('tax', DB::raw('SUM(price) as total_sales'))
            ->groupBy('tax')
            ->havingRaw('SUM(price)')
            ->get();

dd($orders);

funktioniert es.
 
Zurück
Oben Unten