数据:
id uid type
1 20 A
2 20 B
3 20 A
4 6 A
5 1 A
6 3 A
7 6 A
8 1 B
情境:
我希望按type
进行分组,然后按id
对其进行排序。我正在使用分组来对uid
进行分组。
当前查询:
SELECT
type,
GROUP_CONCAT(DISTINCT uid) AS users,
COUNT(type) AS typeCount
FROM
`test2`
GROUP BY
type
问题:
但uid
的顺序不正确,根据id
,它应按降序排列。
预期结果:
type users typeCount
A 6,3,1,20 6
B 1,20 2
我的结果:
type users typeCount
A 20,6,1,3 6
B 20,1 2
答案 0 :(得分:5)
MySQL的谜团。
实际上引擎在ASC顺序中取第一个值,无论你是按ID要求DESC,所以首先"翻转"表,然后:
side_of_cube = list()
test_case = int(raw_input())
for i in range(test_case):
side_of_cube.append(int(raw_input()))
if side_of_cube[i] < 2:
print 1
else:
volume = (((side_of_cube[i])**3) - ((side_of_cube[i]) - 2)**3)
print volume
答案 1 :(得分:2)
你可以做一些像Sampson在这篇文章中建议的那样的事情:
MySQL: Sort GROUP_CONCAT values
这是MySQL文档的链接
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function%5Fgroup-concat
以下是他给出的例子:
SELECT student_name,
GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ')
FROM student
GROUP BY student_name;
您只需根据需要进行调整。
希望这有帮助
答案 2 :(得分:1)
@mitkosoft的答案已经是正确的了。
我发布此信息只是为了分析正确的预期结果。
从以下输出中,我们可以看到,对于类型&#39; A&#39;在DISTINCT生效之前,在ORDER BY id DESC之后,行是:
6 3 1 6 20 20
然后DISTINCT可以产生两种可能的结果:6,3,1,20或3,1,6,20。
生成哪一个是未确定的并且实现相关。否则,我们不能依赖它。
因此,群组的期望结果是&#39; A&#39;应为6,3,1,20或3,1,6,20。两者都正确。
mysql> SELECT * FROM test2;
+------+------+------+
| id | uid | type |
+------+------+------+
| 1 | 20 | A |
| 2 | 20 | B |
| 3 | 20 | A |
| 4 | 6 | A |
| 5 | 1 | A |
| 6 | 3 | A |
| 7 | 6 | A |
| 8 | 1 | B |
+------+------+------+
8 rows in set (0.00 sec)
mysql> SELECT uid FROM test2 WHERE type='A' ORDER BY id DESC;
+------+
| uid |
+------+
| 6 |
| 3 |
| 1 |
| 6 |
| 20 |
| 20 |
+------+
6 rows in set (0.00 sec)
答案 3 :(得分:0)
尝试类似:
SELECT
type,
GROUP_CONCAT(DISTINCT uid) AS users,
COUNT(type) AS typeCount
FROM
(SELECT type, uid
FROM `test2`
ORDER BY uid desc) mytableAlias
GROUP BY
type
答案 4 :(得分:0)
这不需要子查询。根据您的说明,您只需ORDER BY
中的GROUP_CONCAT()
:
SELECT type,
GROUP_CONCAT(DISTINCT uid ORDER BY uid DESC) AS users,
COUNT(type) AS typeCount
FROM `test2`
GROUP BY type;
在MySQL中,避免不必要的子查询是个好主意,因为数据库引擎会实现它们。