Como fazer o equivalente de DISTINTAS na consulta de resultados da contagem

Minha tabela armazena um conjunto de resultados da pesquisa, que eu estou de saída para uma página de resultados utilizando esta consulta:

SELECT a.question_one AS answer, q1.ct AS q1_count, q2.ct AS q2_count, q3.ct AS q3_count 
FROM vote_entries 
AS a 
INNER JOIN (SELECT question_one, count(question_one) AS ct from vote_entries group by question_one) q1 on q1.question_one=a.question_one 
INNER JOIN (SELECT question_two, count(question_two) AS ct FROM vote_entries group by question_two) q2 on q2.question_two=a.question_one 
INNER JOIN (SELECT question_three, count(question_three) AS ct FROM vote_entries group by question_three) q3 on q3.question_three=a.question_one 
GROUP BY a.question_one

Isso funciona como eu quero, mas eu tenho notado que algumas pessoas de ter enviado mais de uma vez a partir do mesmo endereço de e-mail. Eu quero filtrar essas pessoas, de modo que apenas uma das respostas está incluído.

Essencialmente, eu quero ter algo como WHERE DISTINCT email, mas é claro que não existe. Alguém sabe como eu posso conseguir o que eu estou tentando fazer, de preferência em um presente consulta?

Esta é a minha estrutura da tabela:

CREATE TABLE IF NOT EXISTS `vote_entries` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(128) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `name` varchar(128) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `question_one` varchar(32) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `question_two` varchar(32) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `question_three` varchar(32) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;

Um exemplo de dados semelhante a abaixo. O usuário pode selecionar uma das três opções em um conjunto de botão de rádio para cada uma das perguntas.

+----+------------------+------------+--------------+--------------+----------------+
| id |      email       |    name    | question_one | question_two | question_three |
+----+------------------+------------+--------------+--------------+----------------+
|  1 | [email protected]   | John Doe   | RIC          | RIC          | RIC            |
|  2 | [email protected]  | Jane Smith | BAR          | BAR          | BAR            |
|  3 | [email protected]  | Jane Smith | BAR          | BAR          | BAR            |
|  4 | [email protected] | Kelly Doe  | Existing     | Existing     | Existing       |
+----+------------------+------------+--------------+--------------+----------------+

O problema é que, se Jane Smith envia sua resposta duas vezes, ele vai distorcer os resultados de forma injusta. Mas eu não quero incentivar as pessoas a fazer falsos endereços de e-mail para enviar mais de uma vez, quer - assim, um frontend de solução de algum tipo não é o que eu estou lookign para.

-1
2019-09-17 09:58:48
origem
1 respostas

você tem que implementar um repr função para o objeto em questão.

Para alterar a saída de Terra, você pode adicionar um repr função para a terra de classe.

alterar repr diretamente do elemento não funciona muito bem como esta classe não parecem permitir monkeypatching (Muitas classes de permitir a monkeypatch um método de instância)

Um exemplo que você tem para se adaptar às suas necessidades seriam:

class Earth(object):
    def __init__(self):
        self.life_support = True
        self.presence_of_water = True
        planet_earth = Planet(self, nom=1)
        self.node = planet_earth.get_node(self, self.__dict__)

    def __repr__(self):
        return("<Element %%s(life_support=%%s, nom=%%s)" %%
               (self.__class__.__name__,
                self.life_support,
                self.node.tag,  # display xml tag of element
                # or self.node.attrib["name"],
               ))

earth = Earth()
print(earth)  # this looks now nicer
print(earth.node)  # this still looks ugly
etree.dump(earth.node)  # sends the xml of the given node to stdout

Por favor, note que o código acima foi testado com o python3 e não com python2

+1
2019-09-17 13:32:04

Veja mais perguntas por marcas