使用group by子句时出现SQL查询错误

时间:2019-06-20 07:26:21

标签: mysql sql

我有一个这样的表:https://d1sz9tkli0lfjq.cloudfront.net/items/3w0v1Q111H0y0A093A31/Screenshot-2019-06-22T07%3A15%3A28.564Z.png

我必须以这样的方式查询数据:输出https://d1sz9tkli0lfjq.cloudfront.net/items/0P0B3K1W430h131K451F/Screenshot-2019-06-22T07%3A15%3A55.665Z.png

SQL查询错误:

  

1055-SELECT列表的表达式#1不在GROUP BY子句中,并且   包含非聚合列'wp-local.visits.id',该列不是   功能上取决于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by

不兼容

我尝试了多次查询以获得这样的输出。

SELECT *
FROM `rrp_visits`
WHERE `step_id` IN ( 235, 243, 247 )  
GROUP BY `rrp_visits`.`step_id` ASC

https://d1sz9tkli0lfjq.cloudfront.net/items/0P0B3K1W430h131K451F/Screenshot-2019-06-22T07%3A15%3A55.665Z.png

1 个答案:

答案 0 :(得分:0)

*子句中使用GROUP BY(即所有列)不是一个好主意。在这里,您只需要选择相关的列,还需要将它们添加到GROUP BY子句中。同样正如jarlh所建议的,ASCORDER BY子句一起使用。

要获得预期的输出,请在CASE内使用COUNT()

 SELECT Step_Id, COUNT(Step_Id) AS TotalVisit
 ,COUNT(CASE WHEN Visit_type = 'New' THEN Step_id ELSE NULL END) AS UniqueVisit
 FROM rrp_visits 
 WHERE step_id IN ( 235, 243, 247 )
 GROUP BY rrp_visits.step_id

输出:

| Step_Id | TotalVisit | UniqueVisit |
|---------|------------|-------------|
|     235 |          3 |           1 |
|     243 |          4 |           2 |
|     247 |          2 |           1 |

SQLFiddle

MySQL参考手册中的Checkout GROUP BY子句,以进行详细说明。