Programmieren – die besten Beiträge

SQL effizientes mehrdimensionales Histogramm erstellen?

Hallo,

ich habe folgende SQL Tabelle und würde aus dieser mit SQL Abfragen gerne ein mehrdimensionales Histogramm erzeugen.

Meine Tabelle:

`sex` => VARCHAR(1), //für Geschlecht

`age` => INT,

`salary` => INT

Gefüllt könnte z.B. so aussehen (aber mit viel(!) mehr Einträgen natürlich):

Am ende will ich mit meiner Abfrage folgende Ausgabe erzielen:

Wie man in der obigen Ausgabe sieht, will ich die Bereiche bei age und salary nicht(!) gleich verteilen. Alle Lösungen welche also immer in 10er Schritten gehen, funktionieren in meinem Fall nicht. Die "..." Zeile in der Ausgabe soll andeuten, dass die Bereiche bei F(emale) einfach nach der selben Logik (aber vielleicht mit unterschiedlichen Bereichsbreiten) weitergehen. Daran schließt sich dann M(ale), mit den gleichen Bereichen wie F(emale) an. Count gibt jeweils die Anzahl der gefundenen Einträge zu den gegebenen Einschränkungen an. Also z.B. für den ersten Fall sowas wie

SELECT COUNT(*) from `companysalaries` WHERE age >= 18 AND age <= 19 AND salary >= 0 AND salary <= 999 AND sex='F';

Mein bisheriger (funktionierender) Ansatz war:

  1. Stored procedure erstellen
  2. temporary tables als Hiflstabellen mit Bereichen füllen und Hilfstabelle für Ausgabe erstellen
  3. 3-fach geschachtelete WHILE schleife mit Select und INSERT in einen Ausgabetabelle

JETZT ZUR EIGENTLICHEN FRAGE:

Mir kommt meine bisherige Lösung sehr ineffizient vor (54 Zeilen :/), und ich denke mir, dass man ja eigentlich in so einer schönen Sprache wie SQL dieses Problem doch einfacher lösen können müsste. Meine Lösung habe ich auch schon mehrmals überarbeitet, aber ohne die Leserlichkeit aufzugeben, komme ich nicht wesentlich unter die 54 Zeilen. Daher die Frage, ob das irgendwie besser, effizienter und/oder kürzer geht. Die Lösung sollte zudem nur(!) SQL enthalten und keine sonstigen Erweiterungen benötigen/nutzen.

Danke im Voraus für alle Antworten

whgoffline

Bild zum Beitrag
Computer, Technik, SQL, programmieren, Datenbank, Informatik, Technologie

Fehlermeldung: "Command raised an exception: AttributeError: 'NoneType' object has no attribute 'stop'"?

Hallo!

Ich bin gerade dabei zu versuchen, meinen Discord Musikbot zu programmieren.

Aber als ich den Bot getestet habe, kam die ganze Zeit der Fehler

"Command raised an exception: AttributeError: 'NoneType' object has no attribute 'stop'".

Nun wollt ich fragen, ob ihr mir helfen könnt. Hier ist nochmal der Code:

import discord
from discord.ext import commands
import youtube_dl

class music(commands.Cog):
  def __init__(self, client):
    self.client = client

  @commands.command()
  async def join(self, ctx):
    if ctx.author.voice is None:
      await ctx.send("Du bist in keinem Channel!")

    voice_channel = ctx.author.voice.channel

    if ctx.voice_client is None:
      await voice_channel.connect()
    else:
      await ctx.voice_client.move_to(voice_channel)

  @commands.command()
  async def disconnect(self, ctx):
    await ctx.voice_client.disconnect()

  @commands.command()
  async def play(self,ctx, url):
    ctx.voice_client.stop()
    FFMPEG_OPTIONS = { 'before_options': '-reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5', 'options': '-vn' }
    YDL_OPTIONS = { 'format:"bestaudio"' }
    vc = ctx.voice_client

    with youtube_dl.YoutubeDL(YDL_OPTIONS) as ydl:
      info = ydl.extract_info(url, download = False)
      url2 = info['formats'][0]['url']
      source = await discord.FFmpegOpusAudio.from_probe(url2, **FFMPEG_OPTIONS)
      vc.play(source)

  @commands.command()
  async def pause(self, ctx):
    await ctx.voice_client.pause()
    await ctx_send("Pausiert⏸️")

  @commands.command()
  async def resume(self, ctx):
    await ctx.voice_client.resume()
    await ctx_send("Weiter⏯️")

def setup(client):
  client.add_cog(music(client))
programmieren, Bot, Fehlermeldung, Discord

Meistgelesene Beiträge zum Thema Programmieren