我有以下mysql表:
Item Name Listing Fee Listing Type
watch $0.20 LISTED
watch $0.20 LISTED
watch $0.30 SOLD
glasses $0.50 LISTED
glasses $0.50 LISTED
glasses $0.50 LISTED
glasses $1.00 SOLD
我需要的是由Group by SQL输出:
Item Name Total Fee Total Listed Total Sold
watch $0.70 2 1
glasses $2.50 3 1
规则是每个“项目名称”将具有多个列表记录,其中定义了费用和列表类型。可能有两个“列表类型”[列出&已经售出。
我想在表上运行查询并生成所提及的输出摘要。
感谢 wikki
答案 0 :(得分:2)
首先 - 您应该按项目对这些记录进行分组,然后计算总数,您可以使用小技巧 -
SELECT
`Item Name`,
SUM(`Listing Fee`) `Total Fee`,
COUNT(IF(`Listing Type` = 'LISTED', 1, NULL)) `Total Listed`,
COUNT(IF(`Listing Type` = 'SOLD', 1, NULL)) `Total Sold`
FROM
mytable
GROUP BY
`Item Name`;
答案 1 :(得分:2)
SELECT
`Item Name`,
SUM(`Listing Fee`) AS `Total Fee`,
SUM(CASE `Listing Type` WHEN 'LISTED' THEN 1 ELSE 0 END) AS `Total Listed`,
SUM(CASE `Listing Type` WHEN 'SOLD' THEN 1 ELSE 0 END) AS `Total Sold`
FROM `Table Name`
GROUP BY `Item Name`
这将使用静态“列表类型”汇总列表。如果需要动态列表,则必须在存储过程中构建SQL并执行它。
输出:
Item Name Total Fee Total Listed Total Sold
watch $0.70 2 1
glasses $2.50 3 1
你可以更进一步:
SELECT
`Item Name`,
SUM(
CASE `Listing Type`
WHEN 'LISTED' THEN `Listing Fee`
ELSE 0
END
) AS `Total Fee Listing`,
SUM(
CASE `Listing Type`
WHEN 'SOLD' THEN `Listing Fee`
ELSE 0
END
) AS `Total Fee Sold`
FROM `Table Name`
GROUP BY `Item Name`
输出:
Item Name Total Fee Listing Total Fee Sold
watch $0.40 $0.30
glasses $1.50 $1.00