Count Funktion

Martinha

Aktiver Benutzer
Beiträge
43
Hi,

ich möchte ein einfache function in Mariadb erzeugen, scheitere aber an der Syntax.
Ich möchte eine Zahl bekommen, wieviel Datensätze eines Keys in einer Tabelle sind:

CREATE FUNCTION udfbelegung
(
IN keyk INT
)
RETURNS int
BEGIN
select COUNT(*) as cp from tabelle where keyk = keyk;
RETURN cp;
END;

Das ist jetzt mal die "logische" Syntax, eine von vielen Versuchen.

Danke für Hilfe!

Martin
 
Werbung:
sorry, muss natürlich heissen

CREATE FUNCTION udfbelegung
(
IN keyinput INT
)
RETURNS int
BEGIN
select COUNT(*) as cp from tabelle where tabelle.keyk = keyinput;
RETURN cp;
END;
 
Code:
postgres=# create table foo (id int primary key, val int);
CREATE TABLE
postgres=# insert into foo values (1,100);
INSERT 0 1
postgres=# insert into foo values (2,200);
INSERT 0 1
postgres=# create or replace function foo_count(_id int) returns setof bigint as $$begin return query select count(*) from foo where id = _id; end;$$language plpgsql;
CREATE FUNCTION
postgres=# select * from foo_count(1);
 foo_count 
-----------
         1
(1 row)

postgres=# select * from foo_count(3);
 foo_count 
-----------
         0
(1 row)

postgres=#
 
Hi,

sorry, deine Antwort verstehe ich nicht.

ich erkläre noch mal, was ich möchte, sorry, wenn ich das etwas ungenau war.

Ich create eine view und das Ergebnis der Function soll eine Spalte in dieser View sein..

create view qrybelegung as
select a,
, b
, udfbelegung (b) as belegung

from xy
where wherestring,

In Wahrheit ist die View natürlich länger aber Rest interessiert hier nicht.
Ich möchte nur wissen, wie ich die Function codieren soll, die nichts anderes macht, als mir eine Zahl zurückzugeben, nämlich die Anzahl der Datensätze in einer Tabelle mit einem Key.
Es handelt sich auch um eine MariaDb.

So sah die Function in SQL aus, aber die Syntax scheint bei MariaDb, zumindest was die Funktionen angeht, sehr unterschiedlich zu sein:

CREATE FUNCTION [dbo].[udfbelegung]
(
-- Add the parameters for the function here
@kursid as int
)
RETURNS int
AS
BEGIN
-- Declare the return variable here
DECLARE @countkb as int

-- Add the T-SQL statements to compute the return value here
select @countkb = COUNT(*) from leistungsnehmer where kursid = @kursid

-- Return the result of the function
RETURN @countkb

END

Eigentlich kein Hexenwerk...


Danke für Hilfe!

Martin
 
Eigentlich kein Hexenwerk...
nein, hier steht ja auch, wie es aussehen könnte:
select @countkb = COUNT(*) from leistungsnehmer where kursid = @kursid
Was ist also Dein Problem?
Du machst offenbar eine Umstellung von MS SQL nach MariaDB?

Tatsächlich ist es so, dass DER SQL Standard nicht von allen Anbietern gleich implementiert ist. Das gilt besonders dann noch viel mehr, wenn man SQL verlässt und Funktionen oder Prozeduren entwickelt und die jeweilige SQL Erweiterung der Anbieter dafür nutzt.
Das ist nebenbei ein guter Grund, reines SQL einzusetzen, ohne Stored Procedures oder Functions zu verwenden. Weniger Arbeit, flexibler, kompatibler.

Daher und aus anderen Gründen erlaube ich mir mal die Gegenfrage: Brauchst wirklich eine Funktion dafür?

"Zählen" ist ja eine der Kernfähigkeiten von SQL, dafür braucht man selten Funktionen. Es geht direkt in SQL.
 
Hi,

es mag etwas chaotisch aussehen, aber es ist erklärbar.
Ich habe meine Anwendung erfolgreich von Access nach SQL migriert, alles läuft wie es sein soll.
Ein Freund von mir sagte, ich möge doch mal Mariadb testen, die wäre auch gut...der Umstieg wäre ganz einfach...
Habe ich gemacht, aber auf Grund der Unterschiede wieder verworfen.
Ich bleibe bei SQL, von mir aus können meine Beiträge hier auch gelöscht werden.

Bezgl. des Count:

Ich habe eine Tabelle mit Kursen und eine mit Kursbelegungen (person > Kurs).
Ich möchte bei dem Kurs sehen, wieviele Kursbelegungen es zu diesem Kurs gibt und auch, wie viele prozentual davon gelündigt sind.
Das kann man relativ schlank in Funktionren abbilden. Letztendlich läuft ein Count(*) ab ob in einer Function oder in einem etwas komplexeren SQL Statement.
Ich hatte nur Probem mit der Syntax von Maria Funktionen, aber das Problem hat sich jetzt erledigt.

Ich danke für Hilfe!

Martin
 
Werbung:
Ach, so schnell würde ich nicht aufgeben.
Es gibt einen Standard für SQL, aber der wird von jedem Hersteller nur teilweise unterstützt. Und alle bieten eigenes Zeug dazu, man will ja nicht wertvolle Kunden verlieren (und macht ihnen so die Umstellung lieber etwas madig )
Wie eine solche Function bei MariaDB lauten muss, weiß ich nicht. Ich würde auch MariaDB nicht weiter empfehlen.

Und falls wir uns missverstanden haben, Du brauchst sicherlich keine Function, sondern nur SQL.
 
Zurück
Oben