mysql - GROUP BY column HAVING COUNT(*) > 1,仍然显示所有行?
问题描述
我只是想显示具有相同 GROUP_CONCAT() 列值的行。最后使用 GROUP BY 时,由于 GROUP BY 国家/地区,它只显示表中的最后一个全名。当我按国家分组时,是否仍然可以显示所有行?这是我的 sql:
SELECT firstname, lastname, country, COUNT(*) c
FROM (
SELECT firstname, lastname,
GROUP_CONCAT(
DISTINCT f.countryname
ORDER BY f.countryname ASC
SEPARATOR ','
) AS country
FROM person p
INNER JOIN favoritecountry f
ON p.id = f.id
GROUP BY firstname, lastname
) t
GROUP BY country
HAVING c > 1
ORDER BY c DESC;
我的结果是:
+-----------+----------+--------------+---+
| firstname | lastname | country | c |
+-----------+----------+--------------+---+
| bill | smith | Poland,Spain | 2 |
+-----------+----------+--------------+---+
相反,我想要这样的东西:
+-----------+----------+--------------+---+
| firstname | lastname | country | c |
+-----------+----------+--------------+---+
| bill | smith | Poland,Spain | 2 |
| phil | cooper | Poland,Spain | 2 |
+-----------+----------+--------------+---+
刚接触 SQL,所以需要一些帮助
解决方案
根据您的预期结果,您应该将 group_concat 国家的计数与国家的名称交叉加入
select t2.firstname, t2.lastname, t2.country
from (
SELECT firstname, lastname,
GROUP_CONCAT(
DISTINCT f.countryname
ORDER BY f.countryname ASC
SEPARATOR ','
) AS country
FROM person p
INNER JOIN favoritecountry f
ON p.id = f.id
GROUP BY firstname, lastname
) t2
cross join (
select t1.country, count(*) my_count
from (
SELECT firstname
, lastname,
GROUP_CONCAT( DISTINCT f.countryname
ORDER BY f.countryname ASC
SEPARATOR ','
) AS country
FROM person p
INNER JOIN favoritecountry f ON p.id = f.id
GROUP BY firstname, lastname
) t
) t1 on t1.country = t2.country
推荐阅读
- r - 使用 R 中的哪个函数从数据集中删除异常值
- java - AWS fargate 的性能问题
- vba - 复制word文档中所有突出显示的文本并将其粘贴到另一个文档中
- javascript - 如果带有道具的语句反应原生
- javascript - 可以调用 javascript 嵌套函数 new fun1().fun2().fun3()
- rest - openapi 3.0:如何添加其中包含嵌套对象的对象示例?
- google-apps-script - 无法使用 Google Apps 脚本更新 contactusgin People api
- json - 将嵌套的 JSON 解析为 CSV
- java - android.os.Parcel.createExceptionOrNull 致命异常:java.lang.IllegalArgumentException
- javascript - Javascript - 来自具有“父”和“子”行的表中的 Json