我尝试创建一个SQL查询,检索表中每一行的total_cost
。除此之外,我还需要收集columnA
和columnB
的最主要的值,以及它们各自的值。
例如,具有以下表格内容:
| 成本|A列|列B|目标物|
| - -|- -|- -|- -|
| 二百五十个|富|条形图|XYZ坐标系|
| 二百个|富|条形图|XYZ坐标系|
| 一百五十个|条形图|条形图|ABC公司|
| 二百五十个|富|条形图|ABC公司|
结果需要是:
| 总成本|列A_主导|列B_主导|A列_值|列B_值|
| - -|- -|- -|- -|- -|
| 八百五十个|富|条形图|二百五十个|四百人|
现在我可以计算总成本了--这不是问题。我还可以使用this answer得到columnA
的最优值。但是在这之后,我不知道如何 * 也 * 得到columnB
的优值 * 和 * 这些值。
这是我目前的SQL:
SELECT
SUM(`cost`) AS `total_cost`,
COUNT(`columnA`) AS `columnA_dominant`
FROM `table`
GROUP BY `columnA_dominant`
ORDER BY `columnA_dominant` DESC
WHERE `target` = "ABC"
**UPDATE:**感谢 @Barmar 提出使用子查询的想法,我成功地获得了columnA
和columnB
的主导值:
SELECT
-- Retrieve total cost.
SUM(`cost`) AS `total_cost`,
-- Get dominant values.
(
SELECT `columnA`
FROM `table`
GROUP BY `columnA`
ORDER BY COUNT(*) DESC
LIMIT 1
) AS `columnA_dominant`,
(
SELECT `columnB`
FROM `table`
GROUP BY `columnB`
ORDER BY COUNT(*) DESC
LIMIT 1
) AS `columnB_dominant`
FROM `table`
WHERE `target` = "XYZ"
然而,我仍然有问题弄清楚如何计算各自的价值。
2条答案
按热度按时间eh57zj3b1#
您可能已经接近了,如果我们想获得百分比值,我们可以尝试在子查询中添加
COUNT(*)
,以获得columnA
和columnB
的最大计数,然后除以count
的总数如果您的MySQL版本支持窗口函数,则还有另一种方法可以使reduce表扫描获得比相关子查询更好的性能
sqlfiddle
ggazkfy82#
请尝试以下查询
所以如果你想得到百分比和显性值你必须自己做这样的查询
那么您可以连接sum查询以获取所需的所有值
我希望这对你有帮助