2010-11-01 6 views
-3

J'essaye de créer une table dynamique using php mais nécessaire pour obtenir la requête ci-dessous pour fonctionner normalement mais éprouve une erreur que j'ai donnée au-dessous de la question. J'ai besoin d'aide pour le réparer.un peu d'aide avec les fonctions d'agrégat

SELECT test_case_name AS 'Test Case', 
     AVG(no_of_satelites) AS 'Mean Number of Satelites', 
     AVG(hdop) AS 'Mean of HDOP', 
     AVG(longitude) AS 'Mean of Longitude', 
     STD(AVG( longitude)) AS 'StdDev of Longitude', 
     AVG(latitude) AS 'Mean of Latitude', 
     STD(AVG(latitude)) AS 'StdDev of Latitude', 
     (1.114 * pow(10, 5) * STD(AVG(latitude))), 
     (1.114 * pow(10, 5) * STD(AVG(longitude))) 
FROM test_cases, gga_raw_data 
WHERE gga_raw_data.test_case_id = test_cases.test_case_id 
GROUP BY test_case_name 

L'erreur dit:

1111 - Utilisation incorrecte de la fonction de groupe

Toute suggestion ou indices seraient appréciés.

Répondre

3

Trop de parenthèses fermées. Vous avez 2 autres parenthèses de gauche que les parenthèses de droite.

C'est la pièce de la requête qui est déséquilibrée:

((1.114 * pow(10, 5) * STD(AVG(latitude))) , 
((1.114 * pow(10, 5) * STD(AVG(longitude))) 
+0

Wao! besoin d'un second oeil. – ibiangalex

+0

Salut Ike, Il suffit de les supprimer et une autre erreur est apparue: # 1111 - Utilisation invalide de la fonction de groupe. Je suspecte le std ne peut pas être utilisé comme c'est dans la clause where ce qui pourrait être la bonne manière d'implémenter cette même question? – ibiangalex

+0

Le problème est la façon dont vous utilisez la fonction 'STD()'. Si vous avez 'STD (AVG (longitude))' vous voulez probablement faire 'STD (longitude)' à la place. Cela vous donnera une déviation standard de la longitude par rapport à la population, ce que je suppose que vous essayez d'obtenir. –

0

vous devez avoir toutes les colonnes non agrégées de la clause SELECT figurant dans la clause GROUP BY:

SELECT test_case_name AS 'Test Case', 
    AVG(no_of_satelites) AS 'Mean Number of Satelites', 
    AVG(hdop) AS 'Mean of HDOP', 
    AVG(longitude) AS 'Mean of Longitude', 
    STD(AVG( longitude)) AS 'StdDev of Longitude', 
    AVG(latitude) AS 'Mean of Latitude', 
    STD(AVG(latitude)) AS 'StdDev of Latitude', 
    (1.114 * pow(10, 5) * STD(AVG(latitude))), 
    (1.114 * pow(10, 5) * STD(AVG(longitude))) 
FROM test_cases, gga_raw_data 
WHERE gga_raw_data.test_case_id = test_cases.test_case_id 
GROUP BY test_case_name, (1.114 * pow(10, 5) * STD(AVG(latitude))), 
    (1.114 * pow(10, 5) * STD(AVG(longitude))) 
+0

Merci Leslie d'avoir signalé cela, mais avant de faire quelque chose à ce sujet, je dois corriger quelque chose. J'ai juste vérifié mes maths et je me suis rendu compte que cela n'avait pas de sens de rechercher la STD() d'une seule valeur comme je l'ai fait dans ma requête, c'est-à-dire trouver STD (AVG()). STD() est supposé être effectué sur un ensemble de données tout comme l'AVG(). Je dois mettre cela en ordre. – ibiangalex

Questions connexes