Mysql:使用count合并两列
我正在寻找以下问题的sql语句: 这是我桌子上的一段摘录Mysql:使用count合并两列,mysql,count,union,Mysql,Count,Union,我正在寻找以下问题的sql语句: 这是我桌子上的一段摘录 'from_city' 'to_city' New York Boston Chicago New York New York Los Angeles Dallas San Francisco Miami New York Dallas Los Angeles 预期结果应如下所示: City Count Percentage New York
'from_city' 'to_city'
New York Boston
Chicago New York
New York Los Angeles
Dallas San Francisco
Miami New York
Dallas Los Angeles
预期结果应如下所示:
City Count Percentage
New York 4 33%
Los Angeles 2 17%
Dallas 2 17%
San Francisco 1 8%
Miami 1 8%
Chicago 1 8%
Boston 1 8%
因此,我需要将“from_city”和“to_city”这两个栏目合并起来,我可以:
(SELECT from_city AS City FROM table) UNION
(SELECT to_city AS City FROM table)
但现在我不知道如何在结果集中应用计数和百分比。
你能帮帮我吗
提前谢谢
SELECT City, COUNT(*) AS Count, ROUND(100*COUNT(*)/total) AS Percentage
FROM (SELECT from_city AS City
FROM table
UNION ALL
SELECT to_city AS City
FROM table
) AS u
CROSS JOIN (SELECT 2 * COUNT(*) AS total
FROM table) AS t
GROUP BY City
ORDER BY Count DESC
我相信下面的查询将提供您想要的结果
SELECT
city,
count(*),
count(*)/(SELECT count(*)*2 FROM table)
FROM
(SELECT from_city AS city FROM table
union all
SELECT to_city AS city FROM table) a
GROUP BY
city
您可能希望使用子查询:
SELECT
city,
COUNT(1) AS c,
CONCAT(100*COUNT(1)/sums.total, '%') AS p
FROM
(SELECT from_city AS city FROM t
UNION ALL
SELECT to_city FROM t) AS cities
CROSS JOIN
(SELECT
COUNT(from_city)
+COUNT(to_city) AS total
FROM t) AS sums
GROUP BY
city
ORDER BY
c DESC
-注意,双重计数在常见情况下不起作用(因此使用两列的计数之和)检查
此外,您还没有指定百分比的格式,即百分比中应该包含多少个符号(因为它可能是非整数),因此我将其保留原样您必须使用
UNION ALL
。默认情况下,它是UNION DISTINCT,因此重复项将被删除。噢,快照!Barmar是正确的,答案已被修改,因为作为一个样本。使用2*count(*)
我们会得到错误的百分比为什么表中会有空值?因为“在普通情况下”更像是表中允许空值的特殊情况。我不确定你是否理解了。对我来说,“普通情况”=所有可能的“特殊情况”(包括“一般情况”)的集合。因此,在某些情况下,我将2*COUNT(*)
视为可能的失败
SELECT
city,
COUNT(1) AS c,
CONCAT(100*COUNT(1)/sums.total, '%') AS p
FROM
(SELECT from_city AS city FROM t
UNION ALL
SELECT to_city FROM t) AS cities
CROSS JOIN
(SELECT
COUNT(from_city)
+COUNT(to_city) AS total
FROM t) AS sums
GROUP BY
city
ORDER BY
c DESC