merkman
merkman

Reputation: 89

MySQL ERROR 1241 (21000): Operand should contain 1 column(s) on Aggregate Query

I am using MySQL Ver 14.14 Distrib 5.5.52, for debian-linux-gnu (armv7l) using readline 6.3 running on raspbian OS with on a RaspberyPI 3.

I run the following query and get the following results.

mysql> SELECT
    -> sensorMeasurements.sensorMeasurementDate,
    -> MIN(sensorMeasurements.sensormeasurementvalue) as "minValue",
    -> MAX(sensorMeasurements.sensormeasurementvalue) as "maxValue",
    -> AVG(sensorMeasurements.sensormeasurementvalue) as "avgValue"
    -> FROM   sensorMeasurements
    ->        INNER JOIN userSystemSensors
    ->                ON sensorMeasurements.usersystemsensorid =
    ->                   userSystemSensors.usersystemsensorid
    ->        INNER JOIN sensors
    ->                ON userSystemSensors.sensorid = sensors.sensorid
    ->        INNER JOIN userSystems
    ->                ON userSystemSensors.usersystemid = userSystems.usersystemid
    ->        INNER JOIN users
    ->                ON userSystems.userid = users.userid
    -> WHERE  sensors.sensorid = 1
    ->        AND sensorMeasurements.sensormeasurementdatetime BETWEEN
    ->            "2016-11-05 10:00:00" AND "2016-11-15 11:00:00"
    -> GROUP BY (sensorMeasurements.sensorMeasurementDate);

+-----------------------+----------+----------+-------------------+ 
| sensorMeasurementDate | minValue | maxValue | avgValue          |
+-----------------------+----------+----------+-------------------+ 
| 2016-11-05            |     66.9 |       73 | 69.56107784431138 | 
| 2016-11-06            |     51.5 |     73.4 | 64.03751600512162 | 
| 2016-11-07            |     40.3 |     68.7 | 58.34236111111102 | 
| 2016-11-08            |     39.2 |     59.4 |  48.1092361111111 | 
| 2016-11-09            |     13.2 |     54.8 | 36.78529850746269 |
+-----------------------+----------+----------+-------------------+

When I modify that query to the following I get the error ERROR 1241 (21000): Operand should contain 1 column(s)

SELECT 
sensors.sensorName,
sensorMeasurements.sensorMeasurementDate,
MIN(sensorMeasurements.sensormeasurementvalue) as "minValue",
MAX(sensorMeasurements.sensormeasurementvalue) as "maxValue",
AVG(sensorMeasurements.sensormeasurementvalue) as "avgValue"
FROM   sensorMeasurements 
       INNER JOIN userSystemSensors 
               ON sensorMeasurements.usersystemsensorid = 
                  userSystemSensors.usersystemsensorid 
       INNER JOIN sensors 
               ON userSystemSensors.sensorid = sensors.sensorid 
       INNER JOIN userSystems 
               ON userSystemSensors.usersystemid = userSystems.usersystemid 
       INNER JOIN users 
               ON userSystems.userid = users.userid 
WHERE  sensors.sensorid = 1 
       AND sensorMeasurements.sensormeasurementdatetime BETWEEN 
           "2016-11-05 10:00:00" AND "2016-11-15 11:00:00"
GROUP BY (sensors.sensorName, sensorMeasurements.sensorMeasurementDate);

Any ideas what I am overlooking?

Thanks Steve

Upvotes: 0

Views: 608

Answers (1)

merkman
merkman

Reputation: 89

Mihai's answer worked:

Remove the () from your GROUP BY

Upvotes: 1

Related Questions