0

ジョブの場所を保存すると、JobId、City の 2 つの列を持つテーブル Jobs は、以下のように複数の都市になる場合があります。

-----------------------------
JobId               City
-------------------------------
1                   New York
2                   New York , Ohio , Virginia
3                   New York , Virginia

特定の都市でジョブ ID をカウントする方法 ニューヨーク市でジョブ ID をカウントしたい 結果を次のようにしたい

ニューヨーク 3 オハイオ 1 バージニア 2

4

6 に答える 6

2
SELECT 
  SUBSTRING_INDEX(SUBSTRING_INDEX(all_city, ',', num), ',', -1) AS one_city,
  COUNT(*) AS cnt
FROM (
  SELECT
    GROUP_CONCAT(city separator ',') AS all_city,
    LENGTH(GROUP_CONCAT(citySEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(citySEPARATOR ','), ',', '')) + 1 AS count_city
  FROM table_name
) t
JOIN numbers n
ON n.num <= t.count_city
GROUP BY one_city
ORDER BY cnt DESC;

コンマ区切りの個別の値の数を取得するには、クエリの上で実行しますが、正しい結果を取得するには、**numbers**列 num 整数型を 1 つだけ持つテーブルをもう 1 つ使用し、いくつかの値を挿入する必要があります。この条件で GROUP_CONCAT(city separator ',') AS all_city 中にエラーが発生した場合は、グローバル変数 " SET group_concat_max_len = 18446744073709547520; " を設定します。

于 2014-12-02T11:23:02.123 に答える
1
SELECT COUNT(*) AS jobs 
  FROM Jobs
 WHERE FIELD_IN_SET('New York') > 0
;

ただし、データベースの正規化について読む必要があります。データベース テーブルにカンマ区切りの値のリストがあると、常に「におい」がします。たとえば、ここでは特定の都市名しかチェックできず、ジョブ テーブルで参照されているすべての都市のジョブ カウントのリストを簡単に作成することはできません。ワンゴー...

たとえばhttp://en.wikipedia.org/wiki/Database_normalizationを参照してください...

于 2014-11-27T07:53:11.010 に答える
0

以下のようにテーブルを設計します。各行の各都市名とジョブ ID。

Job ID      City Name
1           New York
2           New York
1           Seattle

次に、以下のリンクに記載されているクエリを使用します。

SQL:列内の各個別値の数を取得する方法は?

于 2014-11-27T07:56:21.747 に答える
0

このクエリを試してください。

 SELECT COUNT(jobid), city FROM TABLE where city like '%newyork%';
于 2014-11-27T09:10:31.410 に答える