2016-05-17 8 views
0

投票数をカウントするテーブルを照会しようとしていて、投票方法がリスト['C', 'M', 'S', 'L', 'T', 'V', 'B', 'E']にある場合は、1としてカウントし、voting_methodを 'L'に置き換えてください。リスト内の変更列の値を選択してください

今私は正しい結果を返しますが、重複を考慮しない次のクエリを持っています。

select `election_lbl`, `voting_method`, count(*) as numVotes 
from `gen2014` group by `election_lbl`, `voting_method` order by `election_lbl` asc 

election_lbl voting_method numVotes 
2014-09-04 M     1 
2014-09-05 M     2 
2014-09-05 S     1 
2014-09-08 C     16 
2014-09-08 M     5 
2014-09-08 S     9 
2014-09-09 10     5 
2014-09-09 C     46 
2014-09-09 M     4 
2014-09-09 S     5 
2014-09-10 C     92 
2014-0g-10 M     3 
2014-09-10 S     7 
2014-09-11 C     96 
2014-09-11 M     3 
2014-09-11 S     2 
2014-09-12 C     104 
2014-09-12 M     10 
2014-09-12 S     3 
2014-09-15 C     243 
2014-09-15 M     18 
2014-09-15 S     3 
2014-09-16 10     1 
2014-09-16 C     161 
2014-09-16 M     4 
2014-09-16 S     3 
2014-09-17 C     157 
2014-09-17 M     5 
2014-09-17 S     12 

2014-09-05については、2つのvoting_method MとSの両方がリストにあることがわかります。値がリストにある場合は、重複した日付フィールドを削除することが理想的な結果になります。だから、2014-09-05 'L' 3となるでしょう。私はその日付の投票が消えないようにしたいので、結果はそれらを1つに数えるべきです。

クエリをこれに変更しましたが、mysqlの構文が間違っています。

select `election_lbl`, `voting_method`, count(*) as numVotes from `gen2014` 
(case `voting_method` when in ('C', 'M', 'S', 'L', 'T', 'V', 'B', 'E') 
then 'L' END) group by `election_lbl`, `voting_method` order by `election_lbl` asc 

テーブルスキーマ

CREATE TABLE `gen2014` (
`voting_method` varchar(255) DEFAULT NULL, 
`election_lbl` date DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

'in'は基本的に演算子ですが、適切な構文は' 'vote method in .... then ...'でなければなりません。私は何らかの理由で考えることができませんが、クエリが複雑になる必要があります(リストにないメソッドのnumVotesも必要としない限り)。 – Uueerdo

+0

実際にはリストにないメソッドのnumVotesが必要です。目標は、リスト内のものを「L」として数え、残りはそのまま残すことです。 –

答えて

1
SELECT election_lbl 
    , CASE WHEN voting_method IN ('C','M','S','L','T','V','B','E') 
      THEN 'L' 
      ELSE voting_method END my_voting_method 
    , COUNT(*) 
    FROM my_table 
GROUP 
    BY my_voting_method -- or vice 
    , election_lbl;  -- versa 
+0

ありがとうございました。それはそれを解決しました。私は別のmysqlの問題にも悩まされています。多分あなたはそれを解決することができます。 http://stackoverflow.com/questions/37104350/wordnet-mysql-synonyms-and-samples –

0
select x.`election_lbl`, x.`voting_method`, count(*) as numVotes 
from (
     select `election_lbl`, 
     CASE when `voting_method` in ('C', 'M', 'S', 'L', 'T', 'V', 'B', 'E') 
      then 'L' 
      else `voting_method` 
     END as `voting_method` 
     from `gen2014`) x 
group by x.`election_lbl`, x.`voting_method` 
order by x.`election_lbl` asc 
+0

。このエラーが発生しました。派生テーブルはすべて、独自のエイリアスを持つ必要があります。 –

+0

別名を追加しました。 –

1

あなただけのメソッド「L」としてリストされ、それぞれの日付のこれらのメソッドを使用して、総投票をしたい場合は、group by方法を含んでいない、とSELECT選択する必要があり'L' as voting_method

select `election_lbl`, 'L' AS `voting_method`, count(*) as numVotes 
from `gen2014` 
where voting_method IN ('C', 'M', 'S', 'L', 'T', 'V', 'B', 'E') 
group by `election_lbl` 
order by `election_lbl` asc 
+0

リストにないメソッドのnumVotesも必要です。目標は、リスト内のものを「L」として数え、残りはそのまま残すことです。 –

+0

@ YasinYaqoobiは、ストロベリーの答えは、次に行く方法です。 – Uueerdo

+0

ありがとうございます。多分あなたはこれを解決することができますか? http://stackoverflow.com/questions/37104350/wordnet-mysql-synonyms-and-samples –

関連する問題