Mysql 按GroupBySQL分类
我有一张名为list\u details的表格Mysql 按GroupBySQL分类,mysql,sql,Mysql,Sql,我有一张名为list\u details的表格 listId tier 1 5 1 5 1 6 2 4 2 5 我希望得到以下结果: listId tier 1 5(2), 6(1) 2 4(1),5(1) 我尝试了以下查询: SELECT ld.listId,count(ld.tier) from list_det
listId tier
1 5
1 5
1 6
2 4
2 5
我希望得到以下结果:
listId tier
1 5(2), 6(1)
2 4(1),5(1)
我尝试了以下查询:
SELECT ld.listId,count(ld.tier)
from list_details ld
group by ld.listId
它给了我:
listId tier
1 3
2 2
但我不知道我怎么能把条件或。。。根据层次进行分类
谢谢你的帮助
谢谢,迈克:
您的查询结果是:
ListId tierData
1 5(2), 6(1), 4(1),5(1)
But I want:
listId tier
1 5(2), 6(1)
2 4(1),5(1)
将产生:
list_id tier count
1 5 2
1 6 1
etc您希望
根据listid
和tier
进行分组
SELECT
ld.listId,
ld.tier,
count(ld.tier)
FROM list_details ld
GROUP BY ld.listId, ld.tier
这将导致:
listId tier count
1 5 2
1 6 1
2 4 1
2 5 1
这不是你想要的100%的产出,但已经接近了。要获得所需的输出,需要一些时髦的SQL,或者在UI中显示这样的结果 我想你不会;如果您确实需要以5(2)、6(1)
格式显示响应,或者如果您确实需要该格式进行显示,您可以在应用程序层中提供该格式
您只需添加多个分组:
SELECT
listId,
tier,
COUNT(1) AS `tierCount`
FROM list_details
GROUP BY listId, tier
ORDER BY listId ASC, tier ASC
如果需要精确的文本结果,可以执行以下操作:
SELECT
a.listID AS listID,
GROUP_CONCAT(
CONCAT(
a.tier,
'(',
a.tierCount,
')'
)
) AS tierData
FROM (
SELECT
listId,
tier,
COUNT(1) AS `tierCount`
FROM list_details
GROUP BY listId, tier
) AS a
GROUP BY listID
ORDER BY listID ASC
这是针对mysql
还是sqlserver
?不可能两者都是,要想得到你想要的输出,需要知道是哪一个。谢谢迈克!但是我很确定有一种方法可以得到准确的结果;我曾经用过它!虽然不常见@user3000457是的,您可以得到准确的结果,查看更新的答案。
SELECT
a.listID AS listID,
GROUP_CONCAT(
CONCAT(
a.tier,
'(',
a.tierCount,
')'
)
) AS tierData
FROM (
SELECT
listId,
tier,
COUNT(1) AS `tierCount`
FROM list_details
GROUP BY listId, tier
) AS a
GROUP BY listID
ORDER BY listID ASC