Mysql:用计数联合两列

标签 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            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(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

-请注意,在一般情况下,双重计数将不起作用(因此使用两列的计数总和)检查 demo .

此外,您还没有指定百分比格式 - 即其中应该包含多少个符号(因为它可能是非整数) - 所以我将其保留原样

关于Mysql:用计数联合两列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536475/

相关文章:

python字典计数

MySQL Select from UNION 性能问题(杀死数据库)

SQL-ex.ru #26 从两个表中选择平均值

mysql - 在 SQL 数据库中存储权重的最佳实践?

mysql - 如何计算具有垂直值的多个列?

python - 当我更改正在迭代的列表时,如何避免代码中出现列表错误函数?

union - 您如何构建两个DFA的并集?

PHP:查找订单中包含的所有产品

mysql - (泄漏检测)物联网数据通过 JSON 推送到数据库 (Mysql)

ruby - 在 Ruby 中构建交集矩阵