2011-01-07 17 views
0

Hallo
Ich habe folgende Spalten in MySQL-Tabelle: Rating1, Rating2, Preis, Ltg ​​genehmigtenMYSQL unterschiedliche Bedingungen in einer einzigen Abfrage

Ist es möglich, Ergebnisse wie folgt zu wählen:

select 
average rating1 + rating2 as total_rating, 
average rating1 as rating1, 
average rating2 as rating2, 
average price if cond = '1' as price_used 
average price if cond = '2' as price_new 
where approved = '1' 

Bisher habe ich:

SELECT 
(AVG(t.rating1) + AVG(t.rating2))/2 AS total_rating 
AVG(t.rating1) AS rating1, 
AVG(t.rating2) AS rating2, 
---- price statements?? ---- 
FROM t 
WHERE 1=1 
AND t.approved = '1' 

Vielen dank und entschuldigen Sie mich für mein Englisch

Antwort

0

Standard-SQL, funktioniert über "alle" großen dbms:

select (avg(t.rating1) + avg(t.rating2))/2 as total_rating 
     ,avg(t.rating1) as rating1 
     ,avg(t.rating2) as rating2 
     ,avg(case when cond = '1' then price end) as price_used 
     ,avg(case when cond = '2' then price end) as price_new 
    from t 
where t.approved = '1' 
+0

großartig, es hat funktioniert, danke! –

2

Versuchen Sie folgendes:

SELECT (AVG(t.rating1) + AVG(t.rating2))/2 AS total_rating, 
       AVG(t.rating1) AS rating1, 
       AVG(t.rating2) AS rating2, 
       AVG(IF(cond='1', price, NULL)) price_used, 
       AVG(IF(cond='2', price, NULL)) price_new 
FROM t 
WHERE 1=1 
AND t.approved = '1' 

EDIT: Aktualisiert die Abfrage gewünschte Ergebnis zu erhalten.

+0

Nein, es leider nicht funktioniert. price_used hat einen Wert zurückgegeben aber definitiv nicht durchschnittlich und price_new zurückgegeben 0 –

+0

Sie erhalten einen Fehler? – Chandu

+0

kein Fehler, aber leeres Ergebnis auf price_new und false Durchschnitt auf price_used –

0

Ich glaube nicht, einen Durchschnitt auf der If-Anweisung zu arbeiten. Aber hier ist die Syntax für die IF.

IF (Bedingung, value_to_display_if_true, value_to_display_if_false)

So zum Beispiel IF (1 = 1, 'true', 'false') würde für diese Spalte 'true' immer angezeigt werden, da 1 = 1 der Fall ist.

+0

natürlich wäre die einfachste wäre, nur eine Abfrage für jede var und verwenden Sie die Where-Klausel für die cond = '1' Zeug. es sei denn, es gibt einen Leistungsgrund dafür, dass alle Variablen in einer Abfrage abgerufen werden müssen. – jun

+0

Ich bin auf Wordpress, also versuche ich weniger Abfragen als möglich zu tun –

Verwandte Themen