0

名前を含む、それぞれ 1 つの列を持つ 2 つのテーブルがあります。名前は重複する可能性があります。すべてのテーブルまたは 1 つのテーブルに 1 つの名前しかありません。重複をカウントするクエリを作成したいのですが、すべてのテーブルの名前ごとに、これらの値を次のようにリストします。

| name | table1 | table2 |
| john | 12     | 23     |
| mark | 2      | 5      |
| mary |        | 10     |
| luke | 4      |        |

を使用してさまざまな戦略を試しUNIONましたが、運がありませんでした。前もって感謝します!!!

4

4 に答える 4

1
SELECT DISTINCT t1.name, t1.cnt1, t2.cnt2 
FROM
(SELECT name,count(name) as cnt1 FROM table1 GROUP BY name) t1
LEFT JOIN
(SELECT name,count(name) as cnt2 FROM table2 GROUP BY name) t2
ON t1.name = t2.name
UNION 
SELECT DISTINCT t2.name, t1.cnt1, t2.cnt2
FROM
(SELECT name,count(name) as cnt1 FROM table1 GROUP BY name) t1
RIGHT JOIN
(SELECT name,count(name) as cnt2 FROM table2 GROUP BY name) t2
ON t1.name = t2.name
于 2012-07-28T10:18:57.377 に答える
0

いくつか読んだ後、私がやりたいことは可能だとは思いません。この状況は、excelまたはlibreofficeのピボットテーブルで解決できます。実際、これは私が使用した方法であり、名前の出現をカウントしてCSVとしてエクスポートするためにいくつかのsqlstatamentsと組み合わせています。

UNIONは間違いなく機能しません。いくつかのチャンスは参加することですが、確実ではありません。

私と同じ問題について話し合っている投稿を見つけました。

MySQL-行から列へ

于 2012-07-28T16:48:31.527 に答える
0

Here's a simpler solution:

You can UNION the names from the two tables together, manually differentiating their origin tables with a tbl column.

Then it's just a simple GROUP BY with conditional aggregation using the differentiating column:

SELECT a.name,
       NULLIF(COUNT(CASE a.tbl WHEN 1 THEN 1 END), 0) AS table1,
       NULLIF(COUNT(CASE a.tbl WHEN 2 THEN 1 END), 0) AS table2
FROM
(
    SELECT name, 1 AS tbl FROM table1 UNION ALL
    SELECT name, 2 FROM table2
) a
GROUP BY a.name

In accordance with your desired result-set, we NULL the count value if it turns out to be 0.


SQLFiddle Demo

于 2012-07-28T10:29:32.307 に答える
0
SELECT SUM(res.cn), name
FROM
(
    SELECT name, count(name) as cn  from table1 GROUP BY name HAVING count(name) > 1
    UNION ALL
    SELECT name, count(name) as cn from table2 GROUP BY name HAVING count(name)>1
) as res
GROUP BY nam

e

上記を試してください:)テストするためのフィドルを作成しました: http://sqlfiddle.com/#!3/796b2/3

各テーブルにはいくつかの二重名があり、どの名前に二重名があるかを表示してから出力します。一度しか現れない名前は表示されません (HAVING 句によって達成されます)。

于 2012-07-28T10:13:43.780 に答える