Hallo an alle!
Meine Datenbankkenntnisse sind etwas eingerostet, weshalb ich mich ein wenig schwer tue. Vielleicht kann mir ja jemand von euch helfen!
Ich habe folgende Datenbanken:
app
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| app | varchar(3) | NO | PRI | NULL | |
| fak | int(3) | NO | | NULL | |
+--------------+--------------+------+-----+---------+-------+
buchungen
+---------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+----------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| owner | varchar(255) | NO | | - | |
| app | varchar(3) | NO | | NULL | |
| titel | varchar(15) | NO | | NULL | |
| dauer | varchar(4) | NO | | NULL | |
| anfang | date | NO | | NULL | |
| ende | date | NO | | NULL | |
+---------+--------------+------+-----+----------+----------------+
und möchte daraus folgendes Resultat:
+-----+---------+
| app | percent |
+-----+---------+
| A | NULL |
| B | NULL |
| C | NULL |
| D | NULL |
| E | 20 |
| F | NULL |
| G | NULL |
| H | 50 |
| I | NULL |
| J | NULL |
| K | NULL |
| L | NULL |
| M | NULL |
| N | NULL |
+-----+---------+
Folgende Query habe ich dazu generiert:
SELECT DISTINCT * from ((Select
app,
ROUND(SUM(DATEDIFF(ende,anfang))/DATEDIFF('2009-12-31','2009-12-01')*100) as percent
FROM buchungen
WHERE
ende <= '2009-12-31' AND anfang >= '2009-12-01'
AND deleted = 0
GROUP BY app)
UNION
(SELECT DISTINCT app,NULL from apps )) as t group by app
Diese Query funktioniert, erscheint mir jedoch recht "durchs Auge ins Knie" Programmiert. Im Wesentlichen geht es mir hier um die Zusammenfassung der Werte percent, wobei ich trotzdem die app Values haben möchte, in denen keine Belegung (ende/anfang) existiert. Diese Lösung ist eher ein Workaround...
Für Verbesserungsvorschläge wäre ich euch dankbar!!
Viele Grüße
Dennis