[英]How to use group by in sql query?
SELECT DISTINCT
t1.name as t1_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods,
t2.name as t2_name
FROM Table1 t1
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE t1.id='23'
GROUP BY t1.name
运行查询时,出现以下错误:
Column 'Table2.name' is invalid in the select list because it is not contained
in either an aggregate function or the GROUP BY clause.
如何编写此查询?
错误非常明显,可以将聚合函数与t2.name
一起使用,或者将其添加到GROUP BY
,这取决于您要查找的期望结果:
SELECT
t1.name as t1_name,
t2.name as t2_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods
FROM Table1 hi
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE t1.id='23'
GROUP BY t1.name, t2.name;
该错误是有道理的,因为它必须知道要为每个t1.name
组从t2.name
选择哪个值? 是否应选择max
, min
等,否则应使用GROUP BY
。
另外,使用GROUP BY
删除不需要的DISTINCT
。
SELECT
t1.name as t1_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods,
t2.name as t2_name FROM Table1 hi
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE
t1.id='23'
GROUP BY t1.name,t2.name
您需要按AGG函数中未使用的所有字段分组。 等MAX
尝试这个
SELECT
DISTINCT
t1.name as t1_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods,
t2.name as t2_name FROM Table1 hi
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE
t1.id='23'
GROUP BY t1.name,t2.name
您正在使用具有2列的聚合函数,那么您需要对这两列进行分组
我认为您不需要在这里使用DISTINCT关键字。
SELECT
t1.name as t1_name,
MAX(t1.unit) as t1_unit,
MAX(t1.id_producer_goods) AS hi_id_producer_goods,
t2.name as t2_name
FROM Table1 t1
left join Table2 t2 on t1.id_web_site=t2.id_web_site
WHERE t1.id='23'
GROUP BY t1.name,t2.name
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.