maniak: MYSQL 5: Datenbankabfrage UNION

Beitrag lesen

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