我正在尝试在MySQL中对行进行分组,但结果却是错误的结果。
我正在使用此查询:
SELECT
r_id, va_id,va_klasse,va_periode,
1va_mer,1va_hjem,1va_mot,1va_bil,1va_fit,1va_hand,1va_med,1va_fra,
2va_mer,2va_hjem,2va_trae,2va_bil,2va_sty,2va_mus,2va_med,2va_fra,
3va_mer,3va_hjem,3va_mot,3va_bil,3va_pima,3va_nat,3va_med,3va_fra,
va_lock, va_update
FROM o6hxd_valgfag
WHERE va_klasse IN('7A','7B','7C','8A','8B','8C','9A','9B','9C')
GROUP BY va_id
ORDER BY va_klasse,va_name
这会产生错误的结果,其中返回一行只有前三个数字123而不是第二行和第三行中的数字。 我想要的是将数字123,321和132收集在一行中的结果。
如果这还不够,我可以解释得更详细。
答案 0 :(得分:2)
如果跨越这些字段应该只有一个值,那么你应该将它们全部放在同一个记录中,然后修复它以插入和更新相同的记录。
即我知道您的数据库设计不正确 然而 我猜想,为了解决这个问题,你可以解决这个问题。
SELECT
r_id, va_id,va_klasse,va_periode,
MAX(1va_mer),MAX(1va_hjem),MAX(1va_mot),MAX(1va_bil),MAX(1va_fit),MAX(1va_hand),MAX(1va_med),MAX(1va_fra),
MAX(2va_mer),MAX(2va_hjem),MAX(2va_trae),MAX(2va_bil),MAX(2va_sty),MAX(2va_mus),MAX(2va_med),MAX(2va_fra),
MAX(3va_mer),MAX(3va_hjem),MAX(3va_mot),MAX(3va_bil),MAX(3va_pima),MAX(3va_nat),MAX(3va_med),MAX(3va_fra),
va_lock, va_update
FROM o6hxd_valgfag
WHERE va_klasse IN('7A','7B','7C','8A','8B','8C','9A','9B','9C')
GROUP BY va_id
ORDER BY va_klasse,va_name
答案 1 :(得分:1)
您的查询无法按预期运行。想想这个用例:
如果对于row1 (r_id =9)
,字段2va_sty, 2va_mus, 2va_med
不为空且有值?
在这种情况下,你想要的输出应该是什么?当然不能将数字123,321和132聚集在一行中。如果您想使用针对特定字段值执行的聚合函数,则通常会使用分组依据va_id
。
答案 2 :(得分:0)
不是你的问题的解决方案,但我认为更好的查询将是这样的(因为组by by https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html中没有命名的列):
SELECT
aa.r_id, aa.va_id, aa.va_klasse, aa.va_periode,
aa.1va_mer, aa.1va_hjem, aa.1va_mot, aa.1va_bil, aa.1va_fit, aa.1va_hand, aa.1va_med, aa.1va_fra,
aa.2va_mer, aa.2va_hjem, aa.2va_trae, aa.2va_bil, aa.2va_sty,2va_mus, aa.2va_med, aa.2va_fra,
aa.3va_mer, aa.3va_hjem, aa.3va_mot, aa.3va_bil, aa.3va_pima, aa.3va_nat, aa.3va_med, aa.3va_fra,
aa.va_lock, aa.va_update
FROM o6hxd_valgfag AS aa
INNER JOIN (
SELECT va_id
FROM o6hxd_valgfag
GROUP BY va_id
) AS _aa
ON aa.va_id = _aa.va_id
WHERE aa.va_klasse IN ('7A','7B','7C','8A','8B','8C','9A','9B','9C')
ORDER BY aa.va_klasse, aa.va_name;