2017-09-28 1 views
0

Wählen Sie den Namen des Landes und die Anzahl der Kunden aus, vorausgesetzt, dass Großbritannien und GB als dasselbe Land betrachtet werden sollen. Kunden (Land, CustID,)SQL - gibt einen Datensatz für zwei verschiedene Werte in der Tabelle zurück

+----------+-------------+ 
| custID | country  | 
+----------+-------------+ 
| 101  |   US | 
| 102  |   UK | 
| 103  |   GB | 
| 104  |   UAE | 
| 105  |   UK | 
| 106  |   GB | 
+----------+-------------+ 
+2

die Datenbank? und was ist das Sql? – Ravi

+0

Strukturierte Abfragesprache, jede Datenbank Ich möchte nur eine allgemeine Abfrage – Hasan

Antwort

1

können Sie einen CASE Ausdruck verwenden, das Vereinigte Königreich Großbritannien (oder umgekehrt) abzubilden. Verwenden Sie dann eine einfache Aggregationsabfrage, um das gewünschte Ergebnis zu erhalten. Beachten Sie, dass ich die Ländernamen in einer separaten Unterabfrage abbilde, da ANSI SQL die Gruppierung durch eine abgeleitete Spalte nicht unterstützt.

SELECT 
    country, COUNT(*) AS cnt 
FROM 
(
    SELECT 
     CASE WHEN country = 'GB' THEN 'UK' ELSE country END AS country 
    FROM yourTable 
) t 
GROUP BY country 
+0

Was bedeutet das 't' nach ')'? – Hasan

+0

@Hasan Das 't' nach der Unterabfrage ist nur ein _alias_ für diese abgeleitete Tabelle. Einige Datenbanken (z. B. Oracle) erfordern, dass jede abgeleitete Tabelle einen Alias ​​hat. Ob Sie es benötigen, hängt von der Datenbank ab, die Sie verwenden, aber es ist eine gute Gewohnheit, diese aus Gewohnheit einzubeziehen. –

+0

Danke :) es hat gut funktioniert – Hasan

0

Was ich aus Ihrer Frage zu verstehen, können Sie versuchen, die folgende Abfrage

Select country, count(*) from Customers 
group by country; 
+0

das ist nicht richtig – Hasan

Verwandte Themen